Как добавить пользовательский тип ссылки на архивную страницу в навигационное меню?

9

Я не могу понять это. Похоже, что нет никакого флажка или чего-либо подобного в функции для добавления недавно созданной пользовательской страницы архива типа записи в меню.

Также ссылка должна быть активной, если вы находитесь на странице. Это, вероятно, не возможно, но есть ли какой-нибудь плагин для этого? Ради любви ко мне, я не могу найти это :(

Я нашел только этот плагин под названием Custom Arch Type Type Archives в меню Nav , который на самом деле ничего не делает, но добавляет пользовательскую ссылку в меню ... с полным URL-адресом сайта. Он не активен или не очень динамичен.

Я подумал, что, возможно, самым простым способом было бы переопределить wp_nav_menu()и добавить мои ссылки вручную, а затем использовать $_GETинформацию для управления «активной в данный момент ссылкой».

Калле Х. Варавас
источник
После разветвления ответа Стефана я в итоге
нашел

Ответы:

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 требует некоторой настройки. И я надеялся, что, может быть, вы знаете о WP больше, чем я. Так что в настоящее время URL-адрес: example.com/?post_type=myposttype, но должен быть example.com/myposttype. Может просто $url = site_url() . 'myposttype';? И классы не включены, в том числе и активный в данный момент.
Калле Х. Варавас
Ой извини, не видел $class = '';. Тем не менее, я не могу получить нормальные классы динамически, а также как заставить активную в данный момент ссылку работать?
Калле Х. Варавас
Ой двойной извините, не видел $wp_query->query_vars['post_type']=='myposttype'. Работает в принципе. Это хорошая основа для более динамичного решения, спасибо!
Калле Х. Варавас
2

Начиная с WordPress 4.4 (декабрь 2015 г.), ссылки на архивы пользовательских типов записей теперь официально поддерживаются в ядре WordPress без необходимости использования стороннего кода или плагинов.

Вы можете прочитать весь тикет Trac # 16075 для полного обсуждения или статью Make WordPress Core для краткого описания дополнительных меток .

Для того, чтобы включить новый встроенная поддержку для архивных ссылок меню, пользовательские почтовые типов должны зарегистрированы без falsey (то есть истинные) значения has_archive, publicly_queryableи 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 Пользовательский тип записи Архив Nav Меню Ссылка

Примечание. Возможно, вам потребуется включить блок «Параметры экрана» и убедиться, что ваше имя «Архивы типов записей» (например, «Фильмы») отмечено, чтобы оно отображалось на экране меню.

rjb
источник