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


9

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

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

Nav MenusCustom Post Type Archivesと呼ばれるこのプラグインを見つけただけで、実際には何もしませんが、完全なサイトURLでメニューにカスタムリンクを追加します。アクティブにならないか、非常に動的ではありません。

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


スティーブンの答えを分岐した後、私はこの解決策で終わりました:wordpress.org/support/topic/…それが将来誰かに役立つことを願っています:)
Kalle H.Väravas

回答:


1

これは機能するはずだと思う方法の1つです(ただし、テストされていません)。

//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のスラッグを新規作成した場合は、カスタムパーマリンクが使用されていると想定して、リンクURLを作成できます。


答えてくれてありがとう。これは基本的には機能するようです。ただし、URLのフォーマットには多少の調整が必要です。そして私は多分あなたが私よりもWPについて知っていることを望んでいました。したがって、現在のURLはexample.com/?post_type=myposttypeですが、example.com / myposttypeでなければなりません。多分単に$url = site_url() . 'myposttype';?また、現在アクティブなクラスを含め、クラスは含まれていません。
Kalle H.Väravas11年

ああ、すみません、見ませんでした$class = '';。しかし、通常のクラスを動的に取得できず、現在アクティブなリンクを機能させる方法もありませんか?
Kalle H.Väravas11年

ああ、すみません、見ませんでした$wp_query->query_vars['post_type']=='myposttype'。基本的に動作します。これは、よりダイナミックなソリューションの良い基盤です。
Kalle H.Väravas11年

2

WordPress 4.4(2015年12月)以降、サードパーティのコードやプラグインを必要とすることなく、カスタム投稿タイプのアーカイブリンクがWordPressコアで正式にサポートされるようになりました。

完全なディスカッションについてはTrac#16075チケット全体をお読みください。追加のラベルの概要については、Make WordPress Coreの投稿をご覧ください。

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

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',
            ),
        )
    );
});

これらを追加すると、[外観]> [メニュー]管理画面に新しいメタボックスが表示されます。

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

WordPressカスタム投稿タイプアーカイブナビゲーションメニューリンク

注:[画面オプション]ドロワーを切り替えて、[投稿タイプアーカイブ]の名前(映画など)がメニュー画面に表示されるようにチェックされていることを確認する必要があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.