Jak dodać niestandardowe linki strony archiwum typu post do menu nawigacyjnego?

9

Nie mogę tego rozgryźć. Wydaje się, że nie ma pola wyboru ani niczego podobnego w funkcji, aby dodać nowo utworzoną niestandardową stronę archiwum typu postu do menu.

Link musi być również aktywny, jeśli jesteś na stronie. Prawdopodobnie nie jest to możliwe, ale czy jest do tego jakiś plugin? Na miłość moją nie mogę tego znaleźć :(

W menu Nav znalazłem tylko tę wtyczkę o nazwie Archiwa niestandardowych typów postów , która tak naprawdę nic nie robi, ale dodaje niestandardowy link do menu ... z pełnym adresem URL witryny. Nie działa lub nie jest bardzo dynamiczny.

Pomyślałem, że prawdopodobnie najłatwiejszym sposobem byłoby zastąpienie wp_nav_menu()i ręczne dodanie moich łączy, a następnie wykorzystanie $_GETinformacji do sterowania „aktualnie aktywnym łączem”.

Kalle H. Väravas
źródło
Po rozwikłaniu odpowiedzi Stephena skończyłem z tym rozwiązaniem: wordpress.org/support/topic/… Mam nadzieję, że pomoże to w przyszłości :)
Kalle H. Väravas,

Odpowiedzi:

1

To jedna metoda, która moim zdaniem powinna działać (choć nie została przetestowana).

//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;
}

Nie wydaje mi się to najczystszym rozwiązaniem, ale nie znam innego sposobu. Jeśli tak, chciałbym to zobaczyć!

Wreszcie adres URL linku, do którego prowadzą linki do niestandardowych elementów, nie jest „ładny” - ale możesz to zrobić, jeśli utworzysz nowy ślimak CPT (zakładając, że używane są niestandardowe łącza bezpośrednie…)

Stephen Harris
źródło
Dziękuje za odpowiadanie. To wydaje się w zasadzie działać. Jednak formatowanie adresu URL wymaga drobnych poprawek. Miałem nadzieję, że może wiesz o WP więcej niż ja. Obecnie adres URL to: example.com/?post_type=myposttype, ale powinien to być example.com/myposttype. Może po prostu $url = site_url() . 'myposttype';? I klasy nie są uwzględniane, w tym obecnie aktywna.
Kalle H. Väravas,
Och przepraszam, nie widziałem $class = '';. Nie mogę jednak dynamicznie uzyskać normalnych klas, a także jak sprawić, by aktualnie aktywny link działał?
Kalle H. Väravas,
Och podwójnie przepraszam, nie widziałem $wp_query->query_vars['post_type']=='myposttype'. Działa w zasadzie. To z pewnością dobra podstawa do bardziej dynamicznego rozwiązania, dzięki!
Kalle H. Väravas,
2

Począwszy od WordPress 4.4 (grudzień 2015 r.), Linki archiwalne niestandardowych typów postów są teraz oficjalnie obsługiwane w rdzeniu WordPress bez potrzeby korzystania z kodu zewnętrznego ani wtyczek.

Możesz przeczytać cały bilet na Trac # 16075 do pełnej dyskusji lub post Dodać do WordPress Core, aby uzyskać podsumowanie dodatkowych etykiet .

Aby włączyć nowy wbudowane wsparcie dla archiwum linki menu, niestandardowe typy pocztowe muszą zarejestrowana non-falsey (czyli wartości dla prawdziwych) has_archive, publicly_queryableoraz 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',
            ),
        )
    );
});

Dzięki tym dodatkom zobaczysz nowy metaboks na ekranie administracyjnym Wygląd> Menu .

Link do archiwum typu posta można znaleźć na karcie „Wyświetl wszystko” w metaboksie typu postu:

WordPress Niestandardowy typ postu Archiwum Menu nawigacji Link

Uwaga: Konieczne może być przełączenie szuflady „opcji ekranu” i upewnienie się, że nazwa „Archiwum typów postów” (np. Filmy) jest zaznaczona, aby pojawiła się na ekranie menu.

rjb
źródło