Paginación en WordPress con un tipo de publicación personalizado
He buscado por toda la web para encontrar alguna solución, pero ninguna me funciona, ¿alguien puede ayudarme con esto y explicar qué está mal? He pasado 3 horas depurando y no encontré el problema.
Aquí está mi código:
global $paged;
global $wp_query;
wp_reset_query();
$per_page = get_option('posts_per_page');
$cat_cars = get_term_by('slug', 'cars', 'category');
$page_links_total = ceil($cat_cars->count / $per_page);
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
$args = array(
'post_type' => 'cars',
'post_status' => 'publish',
'cat' => $cat_cars->term_id,
'orderby' => 'date',
'order' => 'DESC',
'posts_per_page' => $per_page,
'paged' => $paged
);
$page_links = paginate_links(array(
'base' => add_query_arg('paged', '%#%'),
'format' => '',
'prev_text' => __('«'),
'next_text' => __('»'),
'end_size' => 2,
'mid_size' => 1,
'type' => 'plain',
'total' => $page_links_total,
'current' => $paged
));
$car_query = new WP_Query($args);
Y luego llamo have_posts
, the_post
, etc...
Esta parte funciona, hasta que voy a la segunda página de mi paginación y no encuentro nada.

Recientemente tuve un problema similar y determiné que la causa era que cuando WordPress consulta publicaciones en una categoría, busca publicaciones con post_type igual a 'post' antes de llegar al punto donde consultas el post_type 'any' o algún tipo de publicación personalizado. Esto no causa un problema en la página 1 porque, incluso si no hay publicaciones, llama a tu plantilla. Sin embargo, en la página 2 y siguientes, no encuentra ninguna publicación con post_type 'post', por lo que carga la plantilla 404 antes de que tu plantilla tenga la oportunidad de modificar el parámetro post_type.
¿Es esto un error? Esa es una buena pregunta. Yo diría que sí porque deberías esperar que si registras la taxonomía 'category' en otros post_types, todos los post_types aparecerían en ese archivo, no solo estrictamente publicaciones.
Espero que esto ayude.

Tengo este código (limpiado) en un sitio, llamando posts de un tipo de contenido personalizado, y al final la paginación, si hay más de 10 posts:
<?php $wp_query = new WP_Query(); $wp_query->query('post_type=mycpt&showposts=10'.'&paged='.$paged);
while ($wp_query->have_posts()) : $wp_query->the_post();?>
<h3><?php the_title(); ?></h3>
<?php the_content();?>
<?php endwhile; wp_reset_query(); ?>
<?php if ( $wp_query->max_num_pages > 1 ) { ?>
<div id="nav-below" class="navigation">
<div class="nav-previous"><?php next_posts_link( __( '<span class="meta-nav">«</span> Consejos antiguos', 'twentyten' ) ); ?></div>
<div class="nav-next"><?php previous_posts_link( __( 'Consejos más recientes <span class="meta-nav">»</span>', 'twentyten' ) ); ?></div>
</div>
<?php } ?>
Espero que pueda ayudar.
