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

9

Finalmente recebi paginação para trabalhar com o código abaixo, mas agora a paginação é 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();
 ?>
    
por Dave 06.03.2012 / 00:30

3 respostas

13

Encontrei a resposta:

  

Depois de um dia muuuuito debugando através do núcleo do wordpress, eu consegui resolver   esta questão.

     

Basicamente, você CANT tem uma PAGE e um CUSTOM POST TYPE com o mesmo   nome. Se você fizer isso, as regras de reescrita do permalink ficarão confusas e   acionar um 404.

     

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

     

Feito feito! Espero que isso salve o tempo das pessoas.

por Dave 06.03.2012 / 00:53
4

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

Se você estiver usando a versão 4.2 ou superior, será necessário adicionar as seguintes linhas ao arquivo functions.php :

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!

    
por Dneiz 07.02.2016 / 14:16
1
  

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

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

Primeiro, adicione essas linhas a $args no seu tipo de postagem:

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

Em segundo lugar, em functions.php adicionar ação:

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 regras no painel.

    
por ruorc 30.07.2015 / 14:34