Cum inserez programatic un nou element de meniu?

5 nov. 2013, 17:10:32
Vizualizări: 23.3K
Voturi: 8

Dezvolt un plugin și vreau să inserez elemente de meniu în mod programatic.

Când tema mea creează un meniu, folosește această apelare:

wp_nav_menu( array( 'theme_location' => 'primary', 'menu_class' => 'nav-menu' ) );

Care rezultă în ceva de genul acesta în HTML:

<div class="nav-menu"><ul>
     <li class="current_page_item"><a href="somewhere">element-meniu-1</a></li>
     <li class="page_item page-item-107"><a href="somewhere-else">element meniu 2</a></li>
</ul></div>

Vreau să pot intercepta acest lucru cumva și să inserez propriul meu HTML programatic înainte de închiderea tag-ului </ul>. Cum pot să fac hook pentru asta?

1
Comentarii

Un blog detaliat: http://goo.gl/TbxqDy

Suresh Kamrushi Suresh Kamrushi
30 sept. 2015 08:27:03
Toate răspunsurile la întrebare 2
5
20

Înainte de a fi afișate, toate elementele de meniu sunt procesate printr-un filtru. Poți folosi filtrul wp_nav_menu_items pentru a adăuga elemente noi în meniu:

// Filtru pentru wp_nav_menu() pentru a adăuga link-uri suplimentare și alte elemente
function new_nav_menu_items($items) {
    $homelink = '<li class="home"><a href="' . home_url( '/' ) . '">' . __('Acasă') . '</a></li>';
    // adaugă link-ul către pagina principală la sfârșitul meniului
    $items = $items . $homelink;
    return $items;
}
add_filter( 'wp_nav_menu_items', 'new_nav_menu_items' );

Sau, pentru a fi mai specific, poți ținti doar meniul dorit prin înlocuirea liniei add_filter de mai sus cu următoarea, și înlocuind $menu->slug cu numele real al slug-ului meniului tău:

add_filter( 'wp_nav_menu_{$menu->slug}_items', 'new_nav_menu_items' );

Sursa Tutorial

5 nov. 2013 18:06:24
Comentarii

Mulțumesc, dar nu se întâmplă nimic. Am încercat chiar să pun codul tău exact așa cum este înainte de apelul wp_nav_menu din tema mea, și tot nu are niciun efect.

august7cbfa7b7 august7cbfa7b7
5 nov. 2013 18:31:44

Ce înseamnă că nu se întâmplă nimic? Tocmai am verificat din nou și un link către Home este adăugat ca primul element din meniu. Trebuie să ai un meniu definit pentru locația respectivă și să nu folosești fallback-ul wp_page_menu(). Codul funcționează cu siguranță. Dacă răspunde sau nu la întrebarea ta este altceva, pentru că nu am înțeles prea bine ce întrebai.

helgatheviking helgatheviking
5 nov. 2013 18:48:23

Am editat codul pentru a adăuga linkul către Home la sfârșitul meniului, dar principiul WordPress rămâne același.

helgatheviking helgatheviking
5 nov. 2013 18:50:40

Nu a funcționat pentru că nu aveam un meniu definit de utilizator. După ce am creat propriul meu meniu, a funcționat. Mulțumesc

august7cbfa7b7 august7cbfa7b7
5 nov. 2013 20:00:48

Dacă întrebai cum să adaugi link-uri în meniul tău și acest răspuns ți-a rezolvat problema, atunci ar trebui să îl accepti ca soluție.

helgatheviking helgatheviking
5 nov. 2013 23:08:20
5

Puteți seta container la false și utiliza argumentul items_wrap pentru a omite ul, iar funcția va afișa doar tag-urile li, permițându-vă să le înfășurați în orice aveți nevoie.

wp_nav_menu(
    array(
        'theme_location' => 'primary',
        'items_wrap' => '%3$s',
        'container' => false
    )
);
5 nov. 2013 17:23:20
Comentarii

Mulțumesc, dar schimbă doar <div class="nav-menu">...</div> în <div class="menu">...</div> Deci tot nu am putut adăuga conținutul meu pentru că WordPress deja afișează sfârșitul meniului

august7cbfa7b7 august7cbfa7b7
5 nov. 2013 18:29:11

trebuie să creezi un meniu și să îl atribui unei locații din tema ta, presupun că nu ai făcut asta. am testat și funcționează cu ultima versiune de WordPress și tema TwentyThirteen.

Milo Milo
5 nov. 2013 18:40:02

Folosesc tema default WordPress (twentytwelve) și încerc să modific meniul din partea de sus al temei. Meniul apare în HTML-ul final cu link-uri către paginile mele ca elemente de meniu, dar trebuie să adaug propriul meu element de meniu programatic.

august7cbfa7b7 august7cbfa7b7
5 nov. 2013 18:46:37

ai creat un meniu sub Apariție > Meniuri și l-ai atribuit acelei locații din temă?

Milo Milo
5 nov. 2013 18:52:43

OK, acum funcționează după ce am creat un meniu personalizat. Mulțumesc mult!

august7cbfa7b7 august7cbfa7b7
5 nov. 2013 19:59:50