Paginarea unui WP_query nu afișează link-urile de navigare
Am probleme la adăugarea paginării pe o pagină. Folosesc WP_query și aș dori să afișez 4 postări pe pagină. Query-ul de bază pare să funcționeze OK dar probabil îmi scapă ceva legat de paginare.
// Query-ul pentru 4 postări
$paged = ( get_query_var('paged') ) ? get_query_var('paged') : 1;
$query = new WP_Query();
$query->query('showposts=4'.'&paged='.$paged);
if ( $query->have_posts() ) :
while ( $query->have_posts() ) : $query->the_post(); ?>
<div class="post">
<a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
<p class="author">de <?php the_author(); ?></p>
</div>
<?php endwhile; ?>
<!-- sfârșitul buclei -->
<nav>
<?php previous_posts_link('« Postări mai noi') ?>
<?php next_posts_link('Postări mai vechi »') ?>
</nav>
<?php wp_reset_postdata();
// Dacă nu există rezultate
else : ?>
<p><?php _e( 'Ne pare rău, nicio postare nu corespunde criteriilor.' ); ?></p>
<?php endif; ?>
Am setat variabila pentru paginare în partea de sus astfel:
$query->query('showposts=4'.'&paged='.$paged);
Includ navigarea pentru paginare astfel:
<nav>
<?php previous_posts_link('« Postări mai noi') ?>
<?php next_posts_link('Postări mai vechi »') ?>
</nav>
Dar primesc doar HTML gol <nav></nav> - fără erori, și nu-mi dau seama ce îmi lipsește.
Editare: Conform sugestiei am actualizat astfel:
$paged = ( get_query_var('paged') ) ? get_query_var('paged') : 1;
$args = array(
'posts_per_page' => 4,
'paged' => $paged,
);
$query = new WP_Query( $args );
și am actualizat link-ul butonului la:
<?php next_posts_link( 'Postări mai vechi »', $query->max_num_pages ); ?>
Tot nu văd link-ul de paginare.
Te rog să nu folosești showposts deoarece a fost înlocuit de posts_per_page acum mult timp.
Personal, aș adăuga argumentele la WP_Query așa cum este arătat mai jos, iar paginarea ar trebui să funcționeze astfel:
$paged = ( get_query_var( 'paged' ) ) ? get_query_var( 'paged' ) : 1;
$args = array(
'posts_per_page' => 4,
'paged' => $paged,
);
$the_query = new WP_Query( $args );
global $wp_query;
// Salvează obiectul query implicit într-o variabilă temporară
$tmp_query = $wp_query;
// Acum șterge-l complet
$wp_query = null;
// Repopulează globalul cu query-ul nostru personalizat
$wp_query = $the_query;
if ( $the_query->have_posts() ) :
while ( $the_query->have_posts() ) : $the_query->the_post();
// codul pentru loop
endwhile;
previous_posts_link( '« Postări mai noi' );
next_posts_link( 'Postări mai vechi »', $the_query->max_num_pages );
wp_reset_postdata();
else :
// cod pentru lipsa postărilor
endif;
// Restaurează obiectul query original
$wp_query = null;
$wp_query = $tmp_query;
Aceasta este aceeași soluție ca în întrebarea și răspunsul Cum să repari paginarea pentru loop-uri personalizate? la care te-am trimis, de la @ChipBennett.
O altă observație, dacă acest cod este într-un template de pagină care funcționează ca pagină principală statică, trebuie să folosești variabila de query page în loc de paged:
$paged = ( get_query_var( 'page' ) ) ? get_query_var( 'page' ) : 1;
Salut. Acesta este doar într-o pagină standard, nu o pagină principală statică. Din păcate, codul pe care l-ai furnizat nu funcționează :(
Francesca
@Francesca Ai citit întrebarea pe care am legat-o în comentariul meu? În special partea legată de »Hack the main query object«.
Nicolai Grossherr
Mulțumesc, această soluție funcționează. Îmi cer scuze că nu am văzut editarea ta.
Francesca
Cu plăcere. Nici o problemă, în plus la început nu am adăugat »hack-ul pentru query principal«, care este motivul pentru care acum funcționează. @Francesca
Nicolai Grossherr
Un lucru bun de făcut, obține valoarea posts_per_page din WordPress. Puteți modifica această valoare în meniul de administrare WordPress.
$page = ( get_query_var( 'paged' ) ) ? get_query_var( 'paged' ) : 1;
if(!$page)
$page = ( get_query_var( 'page' ) ) ? get_query_var( 'page' ) : 1;
$posts_per_page = get_option( 'posts_per_page' );
$query = new WP_Query( array(
'posts_per_page' => $posts_per_page,
'paged' => $page,
'post_status' => 'publish',
'orderby' => 'title',
'order' => 'ASC',
) );
while ( $query->have_posts() ) {
$query->the_post();
// Cod pentru Afișare
}