web-dev-qa-db-ja.com

Wp_nav_menu()で現在アクティブなページを手動で指定する方法

wp_nav_menu()を使用しているときにどのページが現在アクティブであるかを手動で指定する方法はありますか?

私は "製品"ページを持っています、そしてそのページ上で私は様々な(動的な)カスタム分類法へのリンクを持っています。これらの分類法の1つをクリックしても、 "Products"ページに留まりますが、wp_nav_menu()は、まだ "Products"ページにいるという事実に言及していません。これを修正できる方法はありますか?

ありがとうございます。

ジョン

9
Jon

1つのメニュー項目にcurrent_page_itemクラスを追加するだけの場合は、nav_menu_css_classフィルタに接続し、必要に応じてそのクラスを追加できます。メニューが表示されるときは と呼ばれます

メニュー全体にアクセスしてクラスを追加する場合は、wp_get_nav_menu_itemsフィルタにフックして、全体の$items配列を取得します。個々の項目のclassesプロパティを編集することができます。

12
Jan Fabry

@Jon <body <?php body_class(); ?>>を使用している限り、WordPressはドロップダウンメニューを使用している場合はcurrent_page_itemと共にクラスcurrent_page_parentをメニューに割り当てます。

2
Chris_O

Janはnav_menu_css_classフィルタについて言及しました、それで私はそれを調べました、そして、この例は私にとって役に立ちましたSource: https://codex.wordpress.org/Plugin_API/Filter_Reference/nav_menu_css_class

function my_special_nav_class( $classes, $item ) {
    if ( is_single() && $item->title == 'Blog' ) {
        $classes[] = 'special-class';
    }
    return $classes;
}    
add_filter( 'nav_menu_css_class', 'my_special_nav_class', 10, 2 );
0
Ross