web-dev-qa-db-ja.com

子供のための現在のメニュー項目を持つカスタム分類ナビゲーション、?

自分の投稿がそのカテゴリ/カスタム税に含まれる場合、追加のアクティブ/現在のメニュークラスを含むカスタム分類ナビゲーションを作成することは可能ですか?

例えば、あなたは...と呼ばれるカスタム分類法を持っています。その中にあなたは晴れ、風、雨が降っています。

カスタム分類のアーカイブか、single.phpか、最も重要なことにはsunnyページの投稿の子投稿かにかかわらず、Sunnyページに表示されるたびに、[Sunny]ボタンが強調表示されますか。

手動でカテゴリを一覧表示してからエコーアクティブの場合に適用する唯一の方法はありますか。

カスタムメニューを追加して管理者経由で追加しようとしましたが、通常のメニュー項目が表示されていただけで、子供や他に何も表示されていませんでした。

これがまったく可能かどうかわからない。

1
user4630

私はあなたが望んでいる行動はWordPressコアの一部ではないと思います。私がこれを最後に必要としたとき、私は改善された投稿タイプの強調表示のために使用される投稿タイプアーカイブリンクプラグインからいくつかの機能を適応させました。それを使用するには、通常の方法でメニュー項目を追加して、これらの機能をプラグインまたはテーマに入れるだけです。

// Get menus to play nicely with the submenu script
// blissfully borrowed from Post Type Archive Links plugin, thanks @stephenharris, @F J Kaiser, @ryancurban
function mrw_tax_archive_current( $items ) {
    foreach ( $items as $item ) {
        if ( 'taxonomy' !== $item->type )
            continue;

        global $post;

        if( !$post )
            continue;

        $taxonomy = $item->object;
        $taxonomy_term = $item->object_id;
        if (
            ! is_tax( $taxonomy, $taxonomy_term )
            AND ! has_term( $taxonomy_term, $taxonomy, $post->ID )
        )
            continue;

        // Make item current
        $item->current = true;
        $item->classes[] = 'current-menu-item';

        // Loop through ancestors and give them 'parent' or 'ancestor' class
        $active_anc_item_ids = mrw_get_item_ancestors( $item );
        foreach ( $items as $key => $parent_item ) {
            $classes = (array) $parent_item->classes;

            // If menu item is the parent
            if ( $parent_item->db_id == $item->menu_item_parent ) {
                $classes[] = 'current-menu-parent';
                $items[ $key ]->current_item_parent = true;
            }

            // If menu item is an ancestor
            if ( in_array( intval( $parent_item->db_id ), $active_anc_item_ids ) ) {
                $classes[] = 'current-menu-ancestor';
                $items[ $key ]->current_item_ancestor = true;
            }

            $items[ $key ]->classes = array_unique( $classes );
        }
    }

    return $items;
}
add_filter('wp_nav_menu_objects','mrw_tax_archive_current');

function mrw_get_item_ancestors( $item ) {
    $anc_id = absint( $item->db_id );

    $active_anc_item_ids = array();
    while (
        $anc_id = get_post_meta( $anc_id, '_menu_item_menu_item_parent', true )
        AND ! in_array( $anc_id, $active_anc_item_ids )
    )
        $active_anc_item_ids[] = $anc_id;

    return $active_anc_item_ids;
}
1
mrwweb