私はプラグインを開発していて、メニュー項目をプログラムで挿入したいのです。
私のテーマがメニューを作成するとき、それはこの呼び出しを使います:
wp_nav_menu( array( 'theme_location' => 'primary', 'menu_class' => 'nav-menu' ) );
その結果、HTMLでは次のようになりました。
<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>
</ul>
を閉じる前に、これをなんらかの形で傍受してプログラムで自分のHTMLを挿入できるようにしたいと思います。どうやって接続するのですか?
印刷される前に、すべてのメニュー項目がフィルタを通過します。 wp_nav_menu_items
フィルタをターゲットにして、メニューに追加することができます。
// 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' );
あるいは、より具体的には、上のadd_filter
行を次のように置き換え、$menu->slug
をあなたのメニューの実際のスラッグ名に置き換えることで、目的のメニューだけをターゲットにすることができます。
add_filter( 'wp_nav_menu_{$menu->slug}_items', 'new_nav_menu_items' );
container
をfalse
に設定してitems_wrap
引数を使用してul
を省略すると、関数はli
タグのみを出力するので、必要に応じてそれをラップできます。
wp_nav_menu(
array(
'theme_location' => 'primary',
'items_wrap' => '%3$s',
'container' => false
)
);