web-dev-qa-db-ja.com

カスタム投稿タイプのアーカイブページへのリンクをナビゲーションメニューに追加する方法

これがわかりません。新しく作成されたカスタム投稿タイプのアーカイブページをメニューに追加するためのチェックボックスやその他の機能はないようです。

ページにいる場合は、リンクもアクティブになっている必要があります。おそらくこれは不可能ですが、それに対するプラグインはありますか?私の愛のために、私はそれを見つけることができません:(

このプラグインはナビゲーションメニューの カスタム投稿タイプアーカイブと呼ばれています これは実際には何もしませんが、メニューへのカスタムリンクを追加します。アクティブにならないか、あまり動的ではありません。

おそらく最も簡単な方法はwp_nav_menu()をオーバーライドして手動でリンクを追加してから$_GET情報を使って「現在アクティブなリンク」を制御することでしょう。

9

これは私がうまくいくはずだと思う一つの方法です(それはテストされていませんが)。

//Hook on to the filter for the (custom) main menu
// 'wp_list_pages' filter is a fallback, when a custom menu isn't being used 
add_filter( 'wp_list_pages', 'new_nav_menu_items' );
add_filter( 'wp_nav_menu_items', 'new_nav_menu_items' );
//Can also hook into a specific menu...
//add_filter( 'wp_nav_menu_{$menu->slug}_items', 'new_nav_menu_items' );

function new_nav_menu_items($items) {
    global $wp_query;
    $class ='';

    //Checks if we are viewing CPT 'myposttype', if so give it the 'active' class.
    if(isset($wp_query->query_vars['post_type'])&& $wp_query->query_vars['post_type']=='myposttype') 
        $class = 'current_page_item';

    //This generates the url of the CPT archive page
    $url = add_query_arg('post_type','myposttype',site_url());

    $myitem = '<li class="'.$class.'"><a href="'.$url.'">My Custom Post Type</a></li>';

    $items = $items . $myitem;
    return $items;
}

これは私にとっては最もクリーンな解決策ではないようですが、私は他の方法を知りません。あれば見てみたいです!

最後に、カスタムアイテムがリンクしているリンクのURLは「きれい」ではありません - しかし、あなたがCPTのスラッグを新しくした場合はそうすることができます(カスタムパーマリンクが使用されていると仮定します)。

1
Stephen Harris

WordPress 4.4(2015年12月)の時点で、カスタム投稿タイプのアーカイブリンクは 正式にはWordPressコアでサポートされています サードパーティのコードやプラグインを必要としません。

Trac#16075 チケット全体を読むためのチケット全体、またはMake WordPress Coreの投稿用に 追加ラベルの要約 を読むことができます。

アーカイブメニューリンクの新しい組み込みサポートを有効にするには、has_archivepublicly_queryableおよびshow_in_nav_menusにカスタム投稿タイプをfalse以外(つまりtrue)の値で登録する必要があります。

add_action( 'init', function () {
    register_post_type( 'movies',
        array(
            'labels' => array(
                'name' => __( 'Movies' ),
                'singular_name' => __( 'Movie' ),
                'archives' => __( 'Movies' ),
            ),
            'public' => true,
            'has_archive' => true,
            'rewrite' => array(
                'slug' => 'movies',
            ),
        )
    );
});

これらの追加により、 外観>メニュー admin画面に新しいメタボックスが表示されます。

投稿タイプのアーカイブリンクは、投稿タイプのメタボックス内の[すべて表示]タブにあります。

WordPress Custom Post Type Archive Nav Menus Link

注:メニュー画面に表示されるようにするには、[画面オプション]パネルを切り替えて、[投稿タイプアーカイブ]の名前(例:映画)を確認する必要があります。

2
rjb