Obține slug-ul elementului de meniu

16 ian. 2013, 13:04:01
Vizualizări: 20K
Voturi: 1

Folosesc meniuri personalizate și aș dori să obțin slug-urile elementelor din meniu. Este posibil acest lucru?

// Obține meniul de navigare bazat pe $menu_name (același ca 'theme_location' sau argumentul 'menu' pentru wp_nav_menu)
// Acest cod se bazează pe codul wp_nav_menu pentru a obține ID-ul meniului din slug-ul meniului

$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
Comentarii

https://wordpress.stackexchange.com/a/13984 verifică această metodă pentru a obține slug-ul termenilor

Mark Irkzher Mark Irkzher
25 dec. 2017 14:02:40
Toate răspunsurile la întrebare 4
0

Deci ai ID-ul postării la dispoziție. Poți folosi această funcție personalizată pentru a obține slug-ul oricărei postări.

function get_the_slug( $id=null ){
    if( empty($id) ):
        global $post;
        if( empty($post) )
            return ''; // Nu există variabilă globală $post disponibilă.
        $id = $post->ID;
    endif;

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

Aceasta va returna slug-ul postării specificate pe care o poți transmite ca argument. Implicit, va returna slug-ul postării curente.

17 mai 2014 11:31:57
0

Poți face ceva de genul:

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

Totuși, această abordare nu este 100% sigură, deoarece - cred eu - slug-ul nu este întotdeauna (sau nu trebuie să fie) identic cu titlul.

31 mai 2017 09:52:31
0

Am creat o soluție care obține meniurile și extrage slug-urile din acestea. Nu sunt sigur dacă funcționează perfect cu meniurile personalizate, dar cel puțin atunci când meniul utilizează postări, categorii sau alte opțiuni pe care WordPress le oferă, funcționează.

Puteți plasa această funcție în fișierul functions.php și să o apelați oriunde în tema dumneavoastră.

//Trebuie să transmiți slug-ul meniului ca parametru funcției. 
//Înlocuiți $current_menu cu slug-ul meniului din care doriți să obțineți slug-urile.
        
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;
}

Această funcție va returna un array cu lista de slug-uri extrase din URL-urile meniului.

30 mar. 2023 17:51:12
1
-1

Este posibil să obții slug-ul folosind $menu_item->post_name;.

16 ian. 2013 15:13:32
Comentarii

Nu, în multe cazuri returnează ID-ul postării. Pare a fi o eroare.

fuxia fuxia
16 ian. 2013 15:35:43