web-dev-qa-db-ja.com

現在選択されているメニュー項目を上書きする

私は私が主にCMSとして使っているWP 3.xサイトを持っています。メニューはさまざまなWordPressページにリンクしています。

ページの1つ、「ニュース」は「投稿」ページです。

ただし、[ニュース]ページのいずれかの投稿をクリックすると、その投稿は "news"の子として扱われないため、メニューの[News]項目は強調表示されません。

メニューで現在強調表示されている項目を上書きする簡単な方法はありますか?理想的にはページIDを強制することです。

1
Pekka 웃

私はあなたがwp_nav_menu()を使っていると仮定するので、単一の投稿を見るときあなたの投稿のページメニュー項目に適用されるクラスcurrent_page_parentがあるべきです。

現時点でおそらくcurrent_page_itemを使用しているのと同じように、このクラスを使用して「アクティブ」状態をスタイルすることができます。

(何らかの理由で)current_page_itemも追加する必要がある場合は、nav_menu_css_classをフィルタ処理できます。

/**
 * Add the class 'current_page_item' to 'page for posts' menu item if we're
 * viewing a single post.
 * 
 * @param array $class
 * @param object $item The current menu item.
 * @return array
 */
function add_current_class_to_posts_page( $classes, $item )
{
    static $posts_page;

    if ( ! is_single() )
        return $classes;

    if ( ! isset( $posts_page ) )
        $posts_page = get_option( 'page_for_posts' ); // cache as we may be calling this a lot!

    if ( $item->object == 'page' && $item->object_id == $posts_page )
        $classes[] = 'current_page_item'; // this is the posts page!

    return $classes;
}
add_filter( 'nav_menu_css_class', 'add_current_class_to_posts_page', 10, 2 );
3
TheDeadMedic