web-dev-qa-db-ja.com

単一の投稿を表示しているときにwp_nav_menuが現在のカテゴリを強調表示しない

私のWordPressサイトにはたくさんの投稿があり、すべてトップレベルのカテゴリとその中のサブカテゴリでまとめられています。

メインページにカテゴリページを表示するナビゲーションがあります。クリックすると、そのトップレベルカテゴリ内のすべての投稿が「アーカイブ」として取得されます。

これらのカテゴリページのいずれかにアクセスしたときに予想されるとおりにカテゴリが強調表示されますが、このカテゴリ内の単一の投稿にアクセスしたときには強調表示されません。私はこの記事が属するトップレベルのカテゴリーがハイライトされ、それが意図された振る舞いであるかのように見えると思います。

だから、私の質問は、次のとおりです。単一の投稿を表示しているときに、メインナビゲーションでその投稿が属するカテゴリをハイライト表示にするにはどうすればよいですか。

このサイトは非常に多くのトラフィックを受け取るので、私はスケーラブルな解決策を望んでいます。

1
gravy

いくつかの wp_nav_menuに付属の組み込みCSSクラス があります。

あなたの場合、あなたは現在のカテゴリクラスのようなものを探しています。それはnotincludedです。しかし、それをCSSクラスに簡単に追加できます。

function wpse_134409_current_category_class($classes, $item) {
    if (
        is_single()
        && 'category' === $item->object
        && in_array($item->object_id, wp_get_post_categories($GLOBALS['post']->ID))
    )
        $classes[] = 'current-category';

    return $classes;
} // function wpse_134409_current_category_class

add_filter('nav_menu_css_class', 'wpse_134409_current_category_class', 10, 2);

注意してください:このコードはテストされていません!

これで、メニュー項目を次のようにターゲティングできます。

#menu-id li.current-category {
    /* styles */
}
3
tfrommen