A volte potrebbe essere utile (o necessario) creare una voce di menu che abbia come etichetta il nome dell’utente corrente. Nell’articolo precedente ho fornito il codice che utilizzo per creare uno shortcode che genera una stringa con il dato desiderato. Ad esempio:

[userdata user_email]

Ovviamente, lo shortcode non può essere inserito come etichetta di una voce di menu, dato che WordPress elimina le parentesi quadre.

Però si può aggirare l’ostacolo…

Si riprenda il codice che genera lo shortocode dell’articolo precedente:

// create [userdata] shortcode
function get_current_userdata_cb( $atts ){
    if ( is_user_logged_in() ) { 
        // get the current user
        $cu = wp_get_current_user();

        switch ( $atts[0] ) {
            case 'user_login':
                return $cu->user_login;
                break;
            case 'user_email':
                return $cu->user_email;
                break;
            case 'user_firstname':
                return $cu->user_firstname;
                break;
            case 'user_lastname':
                return $cu->user_lastname;
                break;
            case 'display_name':
                return $cu->display_name;
                break;
            case 'ID':
                return $cu->ID;
                break;
            default:
                return $cu->user_login;
                break;
        }

    }else{
        return '';
    }
}
add_shortcode( 'userdata', 'get_current_userdata_cb' );

Ora che si ha a disposizione lo shortocode, si può utilizzare la stessa funzione per creare dinamicamente il titolo della voce di menu:

/**
 * Build custom menu item's title
 *
 * @param WP_Post[] $menu_items
 *
 * @return WP_Post[]
 */
function my_dynamic_menu_items( $menu_items ) {
    
    $sc_atts = array( '#user_login#', '#user_email#', '#user_firstname#', '#user_lastname#', '#display_name#', '#ID#' );

    foreach ( $menu_items as $menu_item ) {

        if ( in_array( $menu_item->title, $sc_atts )){

            global $shortcode_tags;

            if ( isset( $shortcode_tags['userdata'] ) ) {

                $user = do_shortcode( '[userdata ' . str_replace( '#', '', $menu_item->title ) . ']' );
                $menu_item->title = $user;
            }
        }
    }

    return $menu_items;
}
add_filter( 'wp_nav_menu_objects', 'my_dynamic_menu_items' );

La funzione di callback my_dynamic_menu_items accetta come argomento un array contenente tutte le voci di menu esistenti nel database.
$sc_atts è un array i cui elementi sono costituiti dalle stringhe che è possibile utilizzare nella pagina di creazione dei menu per generare dinamicamente il titolo del singolo elemento.

Il ciclo foreach itera tra tutti gli elementi del menu, mentre la condizione successiva verifica se la stringa inserita dall’utente trova una corrispondenza nell’array $sc_atts.

In caso positivo, viene eseguito lo shortcode. L’attributo sarà generato dinamicamente in base alla stringa inserita come titolo.

Etichetta di navigazione con shortcode

L’immagine conclusiva mostra la scheda Menu del Customizer di WordPress con la nuova voce di menu con l’etichetta generata dal display_name dell’utente.

Il menu che mostra il nome dell’utente corrente

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *