Como adicionar links personalizados da página de arquivo do tipo de postagem ao menu de navegação?


9

Eu não consigo descobrir isso. Parece não haver caixa de seleção ou algo semelhante em função para adicionar a página de arquivamento de tipo de postagem personalizada recém-criada ao menu.

Além disso, o link deve estar ativo, se você estiver na página. Provavelmente isso não é possível, mas existe algum plugin para isso? Por amor a mim, não consigo encontrar :(

Eu só encontrei este plug-in chamado Custom Post Type Archives nos menus de navegação , que realmente não faz nada, mas adiciona um link personalizado ao menu .. com o URL completo do site. Não fica ativo ou não é muito dinâmico.

Eu pensei que, provavelmente, a maneira mais fácil seria substituir wp_nav_menu()e adicionar meus links manualmente e depois usar as $_GETinformações para controlar o "link ativo no momento".


Depois bifurcação resposta de Stephen, eu acabei com esta solução: wordpress.org/support/topic/... Espero que ajude alguém no futuro :)
Kalle H. Väravas

Respostas:


1

Este é um método que acho que deve funcionar (embora não tenha sido testado).

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

Isso não me parece a solução mais limpa, mas não conheço outra maneira. Se houver, eu gostaria de ver!

Por fim, o URL do link ao qual o item personalizado é vinculado não é "bonito" - mas você pode fazê-lo se alterar a lesma do CPT (supondo que permalinks personalizados estejam sendo usados ​​...)


Obrigado por responder. Isso parece funcionar basicamente. No entanto, a formatação do URL precisa de alguns ajustes. E eu esperava que talvez você conhecesse o WP mais do que eu. Atualmente, o URL é: example.com/?post_type=myposttype, mas deveria ser example.com/myposttype. Talvez simplesmente $url = site_url() . 'myposttype';? E as aulas não estão sendo incluídas, incluindo a atualmente ativa.
Kalle H. Väravas

Oh desculpe, não vi o $class = '';. No entanto, não consigo obter as classes normais dinamicamente e também como fazer o link atualmente ativo funcionar?
Kalle H. Väravas

Oh, desculpe, não vi o $wp_query->query_vars['post_type']=='myposttype'. Funciona basicamente. Esta é uma boa base para uma solução mais dinâmica, com certeza, obrigado!
Kalle H. Väravas

2

A partir do WordPress 4.4 (dezembro de 2015), os links de arquivamento do Tipo de postagem personalizada agora são oficialmente suportados no núcleo do WordPress sem a necessidade de nenhum código ou plug-in de terceiros.

Você pode ler o ticket completo do Trac # 16075 para uma discussão completa ou a publicação Make WordPress Core para obter um resumo dos rótulos adicionais .

Para habilitar o novo suporte embutido para links do menu de arquivo, tipos de pós personalizado tem que registrado com não-Falsey (isto é verdadeiro) valores para has_archive, publicly_queryablee 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',
            ),
        )
    );
});

Com essas adições, você verá uma nova metabox na tela de administração Aparência> Menus .

O link do arquivo morto do tipo de postagem pode ser encontrado na guia "Visualizar tudo", no metabox do tipo de postagem:

WordPress personalizado Post Type Archive Nav Menus Link

Nota: Pode ser necessário alternar a gaveta "opções de tela" e garantir que o nome "Arquivos de tipo de postagem" (por exemplo, filmes) esteja marcado para que apareça na tela Menus.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.