Cum să paginez acest loop personalizat?
Băieți! Sunt sigur că pentru voi va fi floare la ureche, dar încerc să adaug paginare la loop-ul meu. Am încercat niște coduri disponibile pe net și am reușit să-l paginez, dar paginile 2, 3 etc. afișau același conținut ca pagina 1. Care este cea mai bună soluție pentru ceea ce am în momentul de față?
<?php
$recentPosts = new WP_Query();
$recentPosts->query('showposts=5');
?>
<?php while ($recentPosts->have_posts()) : $recentPosts->the_post(); ?>
<article>
</article>
<?php endwhile; ?>
Mulțumesc anticipat.
Probabil acest lucru se întâmplă pentru că utilizați un șablon personalizat de pagină. Încercați următoarele. Am adăugat comentarii la fiecare pas. Sper să vă fie de ajutor.
<?php
//obține pagina curentă
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
//corecții de paginare înainte de buclă
$temp = $query;
$query = null;
//buclă personalizată folosind WP_Query
$query = new WP_Query( array(
'post_status' => 'publish',
'orderby' => 'date',
'order' => 'ASC'
) );
//setează paginarea interogării noastre la $paged
$query -> query('post_type=post&posts_per_page=5'.'&paged='.$paged);
if ( $query->have_posts() ) :
while ( $query->have_posts() ) : $query->the_post();
?>
<li>
<?php if ( has_post_thumbnail()) : ?>
<?php the_post_thumbnail();?>
<?php endif; ?>
<div class="someclass" >
<h2><?php the_title(); ?></h2>
<?php the_content(); ?>
</div>
</li>
<?php endwhile;?>
<?php //transmite max_num_pages, care reprezintă numărul total de pagini ?>
<div class="pagenav">
<div class="alignleft"><?php previous_posts_link('Pagina anterioară', $query->max_num_pages) ?></div>
<div class="alignright"><?php next_posts_link('Pagina următoare', $query->max_num_pages) ?></div>
</div>
<?php endif; ?>
<?php //resetează variabilele setate mai sus înainte de buclă
$query = null; $query = $temp; ?>

Din nu știu ce motiv, în continuare returnează conținutul de la pagina 1 pentru toate paginile. Este un comportament foarte ciudat.

Există câteva modalități de a realiza paginare. Iată una dintre ele:
<?php $query = new WP_Query( array( 'posts_per_page' => 5 ) ); ?>
<?php while ($query->have_posts()) : $query->the_post(); ?>
<article>
<h2><a href="<?php the_permalink(); ?>" rel="bookmark" title="Legătură permanentă către <?php the_title_attribute(); ?>"><?php the_title(); ?></a></h2>
<article>
<?php endwhile; ?>
<div class="nav-previous alignleft"><?php next_posts_link( 'Postări mai vechi' ); ?></div>
<div class="nav-next alignright"><?php previous_posts_link( 'Postări mai noi' ); ?></div>
Desigur, nu va funcționa dacă WP_Query-ul tău nu este construit corect.

Rețineți că "showposts" a fost învechit începând cu WP 2.1 (adică din vremuri străvechi).

Ai citit pagina codex despre paginare? Mai exact această parte: https://codex.wordpress.org/Pagination#Adding_the_.22paged.22_parameter_to_a_query

În acest exemplu, tipul meu de postare este 'news_events', iar paginarea va fi afișată după fiecare 4 titluri de postări afișate.
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
$news_events = array( 'post_type' => 'news_events', 'posts_per_page' => 4, 'paged' => $paged);
$wp_query = new WP_Query( $news_events );
if ( $wp_query->have_posts() ) : ?>
<?php while ( $wp_query->have_posts() ) : $wp_query->the_post();?>
<?php the_title(); echo "<br/>"; ?>
<?php endwhile; ?>
<nav>
<?php previous_posts_link('« Mai noi',$wp_query->max_num_pages); ?>
<?php next_posts_link('Mai vechi »',$wp_query->max_num_pages); ?>
</nav>
<?php wp_reset_postdata(); ?>
<?php else : ?>
<p><?php _e( 'Ne pare rău, momentan nu există postări de știri sau evenimente.', 'theme' ); ?></p>
<?php endif; ?>
