web-dev-qa-db-ja.com

ナビゲーションメニュー項目にページIDクラスを追加

ナビゲーションメニューの<li>項目にページID番号を含むクラスを追加したいと思います。同様のクラスはwp_page_menu()によって生成されますが、何らかの理由でそれらはwp_nav_menu()によって生成されません。

私はおそらく "walker"機能(これは今発見したばかりです)を使用して<li>タグにカスタムクラスを追加し、get_post_meta( $item->ID, '_menu_item_object_id', true );を使用してID番号を取得することができると思いましたが、私はちょっと時間がかかるのですやり方さまざまなフォーラムの誰もがサブメニューなどのためにwalkerクラスを使用することについて質問をしているようで、私は私の検索からさまざまなコードを試してみましたが何も働いていません。各<li>タグにページIDを持つカスタムクラスが必要です。

私の現在のメニューコードは基本です:

function abdmenu_nav()
{
wp_nav_menu(
array(
    'theme_location'  => 'header-menu',
    'menu'            => '',
    'container'       => 'div',
    'container_class' => 'menu-{menu slug}-container',
    'container_id'    => '',
    'menu_class'      => 'menu',
    'menu_id'         => '',
    'echo'            => true,
    'fallback_cb'     => 'wp_page_menu',
    'before'          => '',
    'after'           => '',
    'link_before'     => '',
    'link_after'      => '',
    'items_wrap'      => '<ul>%3$s</ul>',
    'depth'           => 0,
    'walker'          => ''
    )
);
}

私はこれが私が作っているより単純であると確信しています、しかし、私はこれまでウォーカークラスを扱ったことがありません。私がやろうとしていることのためにそれさえ必要であるかどうかについてさえ私は何も見つけることができません。そうであれば、どのように設定すればよいですか。

2
Shoelaced

nav_menu_css_class フィルタを通してカスタムナビゲーションメニュークラスを追加することができます。

例:

以下はCSSクラスwpse-object-id-{object_id}<li>タグに追加する必要があります。

// Add filter
add_filter( 'nav_menu_css_class', 'wpse_menu_item_id_class', 10, 2 ); 

// Your navigational menu
wp_nav_menu( $args );

// Remove filter
remove_filter( 'nav_menu_css_class', 'wpse_menu_item_id_class', 10, 2 );

フィルタコールバックを次のように定義します。

/**
 * Custom Nav Menu Class For Page ID
 */
function wpse_menu_item_id_class( $classes, $item )
{
    if( isset( $item->object_id ) )
        $classes[] = sprintf( 'wpse-object-id-%d', $item->object_id );

    return $classes;
}

ここでobject_id属性は対応するページ/投稿IDを私たちに与えます。

この属性は wp_setup_nav_menu_item() core関数に由来することがわかります。

$menu_item->object_id = ! isset( $menu_item->object_id ) 
    ? get_post_meta( $menu_item->ID, '_menu_item_object_id', true ) 
    : $menu_item->object_id;
4
birgire