Cum inserez programatic un nou element de meniu?
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?

Î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' );

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.

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.

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

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

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
)
);

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

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.

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.

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