Ottenere lo slug di una voce di menu

16 gen 2013, 13:04:01
Visualizzazioni: 20K
Voti: 1

Uso menu personalizzati e vorrei ottenere gli slug delle voci di menu. È possibile?

// Ottieni il menu di navigazione basato su $menu_name (uguale a 'theme_location' o argomento 'menu' di wp_nav_menu)
// Questo codice è basato sul codice di wp_nav_menu per ottenere l'ID del Menu dallo slug del menu

$menu_name = 'main-menu';

if ( ( $locations = get_nav_menu_locations() ) && isset( $locations[ $menu_name ] ) ) {

    $menu = wp_get_nav_menu_object( $locations[ $menu_name ] );
    $menu_items = wp_get_nav_menu_items($menu->term_id);
    $menu_list = '<ul id="menu-' . $menu_name . '">';

        foreach ( (array) $menu_items as $key => $menu_item ) {
            $title = $menu_item->title;
            $url = $menu_item->url;
            $menu_list .= '<li><a href="#' . $url . '">' . $title . '</a></li>';
        }

    $menu_list .= '</ul>';

}

echo $menu_list;

http://codex.wordpress.org/Function_Reference/wp_get_nav_menu_items

1
Commenti

https://wordpress.stackexchange.com/a/13984 controlla quel metodo per ottenere lo slug per i termini

Mark Irkzher Mark Irkzher
25 dic 2017 14:02:40
Tutte le risposte alla domanda 4
0

Bene, hai l'ID del post con te. Quindi puoi utilizzare questa funzione personalizzata per recuperare lo slug di qualsiasi post.

function get_the_slug( $id=null ){
    if( empty($id) ):
        global $post;
        if( empty($post) )
            return ''; // Nessuna variabile globale $post disponibile.
        $id = $post->ID;
    endif;

    $slug = basename( get_permalink($id) );
    return $slug;
}

Questo restituirà lo slug del post specificato che puoi passare come argomento. Di default ti darà lo slug dell'elemento post corrente.

17 mag 2014 11:31:57
0

Puoi fare qualcosa del genere:

$slug = sanitize_title( $menu_item->title );

Tuttavia non è affidabile al 100%, perché -penso- che lo slug non sia sempre (o non debba essere) uguale al titolo.

31 mag 2017 09:52:31
0

Ho creato una soluzione che recupera i menu ed estrae gli slug da essi. Non sono sicuro che funzioni perfettamente con i menu personalizzati, ma almeno quando il menu utilizza post, categorie o altre possibilità offerte da WordPress, funziona.

Puoi inserire questa funzione nel tuo file functions.php e richiamarla ovunque nel tuo tema.

//Devi passare lo slug del menu come parametro alla funzione.
//Sostituisci $current_menu con lo slug del menu da cui vuoi ottenere gli slug.
        
function get_menu_slugs( $current_menu ) {
    $slugs_menu = array();
    $array_menu = wp_get_nav_menu_items( $current_menu );

    foreach ( $array_menu as $m ) {
        $single_slug    = basename( $m->url );
        $slugs_menu[]   = $single_slug;
    }
    return $slugs_menu;
}

Questa funzione restituirà un array con l'elenco degli slug estratti dagli URL del menu.

30 mar 2023 17:51:12
1
-1

È possibile ottenere lo slug con $menu_item->post_name;.

16 gen 2013 15:13:32
Commenti

No, in molti casi restituisce l'ID del post. Sembra un bug.

fuxia fuxia
16 gen 2013 15:35:43