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 Ai citit întrebarea pe care am legat-o în comentariul meu? În special partea legată de »Hack the main query object«.

Mulțumesc, această soluție funcționează. Îmi cer scuze că nu am văzut editarea ta.

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

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
}
