Resolve um nome de tipo de postagem personalizado versus conflito de permalink de página (mesmo slug)

14

Eu tenho um tipo de post personalizado chamado "visningshus" e também uma página com esse slug. Isto é como deveria (deve) ser.

Atualmente, " enlace " lista todas as postagens desse tipo. Eu quero mostrar a página que tem essa lesma permalink em vez disso.

Como posso fazer o Wordpress não fazer com que o nome do tipo de postagem tenha precedência, mas sim o permalink, e mostrar a Página?

    
por Henrik Erlandsson 19.02.2014 / 09:32

7 respostas

25

O mais fácil seria apenas desativar a página de arquivo para este CPT:

register_post_type( 'visningshus',
    array(
        [...]
        'has_archive' => false,
        [...]
    )
);

Não se esqueça de atualizar seus links permanentemente em "Configurações > Permalinks"

    
por kraftner 19.02.2014 / 11:28
7

Eu não tenho reputação suficiente para comentar no post do @Carl, mas esta é a resposta correta (pelo menos para essa situação de manter o page slug e o slug tipo post personalizado o mesmo e não usando um arquivo archive.php)

Mas sua resposta daria erros com paginação. Para evitar erros de paginação:

add_rewrite_rule('^visningshus/page/([0-9]+)','index.php?pagename=visningshus&paged=$matches[1]', 'top');

Isso examina a paginação, captura o número da página e, por outro lado, força-a a usar a página com o espaçador correspondente e insere a variável de página.

Esse além para 'has_archive' => false, postado acima deve alcançar a funcionalidade desejada.

Como os outros afirmaram, lembre-se de liberar as regras de regravação visitando Configurações > Permalinks após fazer esta alteração.

Espero que isso ajude alguém, porque eu sei que isso me deixou perplexo por um bom tempo.

    
por Andrew Herder 14.03.2017 / 21:22
4

Tjena Henrik!

Acho que tudo o que você precisa fazer é adicionar uma regra de reescrita às regras do Wordpress Rewrite que já foram criadas. Adicione este snippet de código ao seu functions.php do seu tema ou inclua-o como um pugin separado ...

add_action('init', function () {
     add_rewrite_rule('visningshus/?$','index.php?pagename=visningshus', 'top');
     flush_rewrite_rules();
}, 1000);
    
por Carl 13.05.2016 / 16:19
0

Eu resolvi isso sem resolver o conflito. Crie uma página com slug visningshus e escreva o que quiser nela. Anote o ID desta página.

Crie e personalize o modelo archive-custom-post-type.php da maneira que desejar (provavelmente você usará apenas um modelo de página), mas substitua a parte do loop por

$recent = new WP_Query("page_id=your-page-id");  
while($recent->have_posts()) : $recent->the_post();
    the_content();
endwhile;

Então, quando você for a enlace , verá o conteúdo gerenciado pela página no URL correto.

Deixe-me saber que funciona.

    
por molokom 19.02.2014 / 11:31
0

Não tem permissão para votar, mas + para a solução Carls, register_post_type deve ter

'has_archive' => false

Simples. No entanto, quando você enfrenta problemas de paginação, dê uma olhada em

add_rewrite_rule
    
por Vitali Protosovitski 23.02.2017 / 18:31
0

O que consertou para mim foi configurar o arquivo como falso, mas também Configurando o hierárquico para falso ao configurar meu tipo de postagem personalizado!

    
por Adrian Sticea 05.10.2018 / 14:50
0

Aqui está uma solução geral para priorizar a paginação sobre o conteúdo de tipos de postagem personalizados para QUALQUER slug de tipo de postagem personalizado.

// prioritize pagination over displaying custom post type content
add_action('init', function() {
  add_rewrite_rule(
    '(.?.+?)/page/?([0-9]{1,})/?$',
    'index.php?pagename=$matches[1]&paged=$matches[2]',
    'top'
  );
});

Além de adicionar esse snippet, você também deve garantir que seu tipo de postagem personalizado tenha archive = false

e por último, mas não menos importante, acesse a página de configurações do Permalinks Configurações > Permalinks (/wp/wp-admin/options-permalink.php) e salve as configurações atuais para atualizar a estrutura de links na página.

    
por jmarceli 08.10.2018 / 08:33