it-swarm.com.de

Wie füge ich programmgesteuert einen neuen Menüpunkt ein?

Ich entwickle ein Plugin und möchte Menüelemente programmgesteuert einfügen.

Wenn mein Thema ein Menü erstellt, verwendet es diesen Aufruf:

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

Was im HTML zu so etwas geführt hat:

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

Ich möchte in der Lage sein, dies irgendwie abzufangen und mein eigenes HTML programmatisch vor dem schließenden </ul> einzufügen. Wie schließe ich es an?

6
agro1986

Alle Menüpunkte werden vor dem Ausdruck durch einen Filter geführt. Sie können den wp_nav_menu_items-Filter gezielt verwenden, um Dinge im Menü anzuheften:

// Filter wp_nav_menu() to add additional links and other output
function new_nav_menu_items($items) {
    $homelink = '<li class="home"><a href="' . home_url( '/' ) . '">' . __('Home') . '</a></li>';
    // add the home link to the end of the menu
    $items = $items . $homelink;
    return $items;
}
add_filter( 'wp_nav_menu_items', 'new_nav_menu_items' );

Genauer gesagt können Sie nur das gewünschte Menü als Ziel festlegen, indem Sie die Zeile add_filter von oben durch die folgende ersetzen und $menu->slug durch den tatsächlichen Namen Ihres Menüs ersetzen:

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

Source Tutorial

12
helgatheviking

Sie können container auf false setzen und das Argument items_wrap verwenden, um die ul auszulassen. Die Funktion gibt dann nur die li-Tags aus, sodass Sie sie in die von Ihnen benötigten Elemente einschließen können.

wp_nav_menu(
    array(
        'theme_location' => 'primary',
        'items_wrap' => '%3$s',
        'container' => false
    )
);
0
Milo