Por que “/ page / 2 /” não está funcionando?

11

Finalmente consegui que a paginação funcionasse com o código abaixo, mas agora a paginação está vinculada a / videos / page / 2 /, que não existe. Como faço para que a página 2 funcione?

<?php
$temp = $wp_query;
$wp_query= null;
$wp_query = new WP_Query();
$wp_query->query('post_type=videos&showposts=1'.'&paged='.$paged);

while ($wp_query->have_posts()) : $wp_query->the_post();
  //display stuff
endwhile;           

php  wp_pagenavi();
 ?>
Dave
fonte
Eu não recomendaria substituir a consulta principal assim, você já pensou em usar pre_get_posts? Então você pode usar o código de paginação embutido em vez de escrever o seu próprio, e pode simplificar até um loop de postagem padrão
Tom J Nowell
Além disso, o WordPress oferece uma página de arquivo padrão para tipos de pós, então você já deve ter um arquivo de pós em /videos/que irá carregar archive-videos.php, que não requer nenhum brincando com consultas
Tom J Nowell

Respostas:

15

Encontrou a resposta:

Após um longo dia de depuração no núcleo do wordpress, consegui resolver esse problema.

Basicamente, você NÃO PODE ter uma PÁGINA e um TIPO PERSONALIZADO DE POST com o mesmo nome. Se o fizer, as regras de reescrita do permalink ficarão confusas e acionarão um 404.

Uma solução muito simples que estou usando é: A página que lista os tipos de postagem personalizados é chamada no plural (por exemplo, produtos) e o nome real do tipo de postagem é no singular (por exemplo, produto). Então eles não entram em conflito e está tudo bem.

Pronto pronto! Espero que isso economize o tempo das pessoas.

Dave
fonte
6
Eu acho que, não apenas uma postagem personalizada, você também não pode ter uma postagem e uma página com o mesmo nome.
Rutwick Gangurde
4

Depois de muito tempo, encontrei uma solução para esse problema (graças ao franzblog ).

Se você estiver usando a versão 4.2 ou superior, precisará adicionar as seguintes linhas no seu functions.phparquivo:

add_filter( 'redirect_canonical', 'custom_disable_redirect_canonical' );
function custom_disable_redirect_canonical( $redirect_url ) {
    if ( is_paged() && is_singular() ) $redirect_url = false; 
    return $redirect_url; 
}

Tudo está funcionando bem agora!

Dneiz
fonte
1

você NÃO PODE ter uma PÁGINA e um TIPO PERSONALIZADO DE POST com o mesmo nome

Talvez três anos atrás fosse impossível, mas agora você PODE.

Primeiro, adicione estas linhas $argsno seu tipo de postagem:

'has_archive' => false,
'rewrite'     => array(
                 'slug'       => 'your slug', // if you need slug
                 'with_front' => false,
                 ),

Segundo, na functions.phpação add:

add_action('init', 'custom_rewrite_basic');
function custom_rewrite_basic() {
    global $wp_post_types;
    foreach ($wp_post_types as $wp_post_type) {
        if ($wp_post_type->_builtin) continue;
        if (!$wp_post_type->has_archive && isset($wp_post_type->rewrite) && isset($wp_post_type->rewrite['with_front']) && !$wp_post_type->rewrite['with_front']) {
            $slug = (isset($wp_post_type->rewrite['slug']) ? $wp_post_type->rewrite['slug'] : $wp_post_type->name);
            $page = get_page_by_slug($slug);
            if ($page) add_rewrite_rule('^' .$slug .'/page/([0-9]+)/?', 'index.php?page_id=' .$page->ID .'&paged=$matches[1]', 'top');
        }
    }
}

function get_page_by_slug($page_slug, $output = OBJECT, $post_type = 'page' ) {
    global $wpdb;

    $page = $wpdb->get_var( $wpdb->prepare( "SELECT ID FROM $wpdb->posts WHERE post_name = %s AND post_type= %s AND post_status = 'publish'", $page_slug, $post_type ) );

    return ($page ? get_post($page, $output) : NULL);
}

Não se esqueça de liberar as regras no painel.

ruorc
fonte