Paginare WordPress cu tip personalizat de postare?
Am căutat peste tot pe internet pentru a găsi o soluție, dar niciuna nu funcționează pentru mine. Poate cineva să mă ajute cu asta și să-mi explice care este problema? Am petrecut 3 ore depanând și nu am găsit problema.
Iată codul meu:
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);
Și mai apoi apelez have_posts
, the_post
, etc..
Această parte funcționează, până când navighez la a doua pagină a paginării mele și nu găsesc nimic.

Am avut recent o problemă similară și am determinat că cauza este că atunci când WordPress interoghează postările dintr-o categorie, caută postări cu post_type egal cu 'post' înainte de a ajunge la punctul în care interoghezi pentru post_type 'any' sau un tip personalizat de postare. Acest lucru nu cauzează o problemă pe pagina 1 deoarece, chiar dacă nu există postări, încarcă șablonul tău. Cu toate acestea, pe pagina 2 și celelalte, nu găsește nicio postare de tipul 'post', așa că încarcă șablonul 404 înainte ca șablonul tău să aibă șansa de a modifica parametrul post_type.
Este acesta un bug? Aceasta este o întrebare bună. Aș spune că da, deoarece te-ai aștepta ca, dacă înregistrezi taxonomia 'category' pe alte post_types, toate post_types să apară în acel arhiv, nu doar strict postările.
Sper că acest lucru te ajută.

Am acest cod (curățat) pe un site, care afișează postări dintr-un tip de postare personalizat, iar la final paginarea, dacă sunt mai mult de 10 postări:
<?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> Articole mai vechi', 'twentyten' ) ); ?></div>
<div class="nav-next"><?php previous_posts_link( __( 'Articole mai noi <span class="meta-nav">»</span>', 'twentyten' ) ); ?></div>
</div>
<?php } ?>
Sper că vă poate fi de folos.
