Come paginare questo loop personalizzato?

25 set 2015, 21:48:22
Visualizzazioni: 18.9K
Voti: 1

Ragazzi! Sono sicuro che per voi sarà un gioco da ragazzi, ma sto cercando di aggiungere la paginazione al mio loop. Ho provato alcuni codici disponibili in giro e sono riuscito a paginarlo, ma le pagine 2, 3, ecc. mostravano lo stesso contenuto della pagina 1. Qual è la soluzione migliore per quello che ho al momento?

<?php
    $recentPosts = new WP_Query();
    $recentPosts->query('showposts=5');
?>
<?php while ($recentPosts->have_posts()) : $recentPosts->the_post(); ?>
    <article>
    </article>
<?php endwhile; ?>

Grazie in anticipo.

0
Tutte le risposte alla domanda 3
3

Probabilmente questo sta accadendo perché stai utilizzando un template di pagina personalizzato. Prova quanto segue. Ho commentato i passaggi lungo il percorso. Spero sia utile.

<?php 
  //ottieni la pagina corrente
  $paged = (get_query_var('paged')) ? get_query_var('paged') : 1;

  //correzioni di impaginazione prima del loop
  $temp =  $query;
  $query = null;

  //loop personalizzato utilizzando WP_Query
  $query = new WP_Query( array( 
    'post_status' => 'publish',
    'orderby' => 'date',
    'order' => 'ASC' 
  ) ); 

 //imposta l'impaginazione della nostra query su $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 //passa il max_num_pages, che è il totale delle pagine ?>
  <div class="pagenav">
    <div class="alignleft"><?php previous_posts_link('Precedente', $query->max_num_pages) ?></div>
    <div class="alignright"><?php next_posts_link('Successivo', $query->max_num_pages) ?></div>
  </div>

<?php endif; ?>

<?php //reimposta quanto impostato sopra prima del loop
$query = null; $query = $temp; ?>
26 set 2015 02:32:22
Commenti

Per qualche motivo continua a restituire su tutte le pagine il contenuto della pagina 1. È un comportamento davvero bizzarro.

Paulo Gabriel Paulo Gabriel
26 set 2015 03:20:17

Che template stai usando per questo loop?

amespower amespower
26 set 2015 04:18:53

Non uno predefinito... Ho creato un nuovo template page chiamato gallery per restituire solo l'immagine in evidenza e i permalink.

Paulo Gabriel Paulo Gabriel
26 set 2015 18:03:49
3

Esistono diversi modi per implementare la paginazione. Ecco un esempio:

<?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="Link permanente a <?php the_title_attribute(); ?>"><?php the_title(); ?></a></h2>
   <article>
<?php endwhile; ?>

<div class="nav-previous alignleft"><?php next_posts_link( 'Post più vecchi' ); ?></div>
<div class="nav-next alignright"><?php previous_posts_link( 'Post più recenti' ); ?></div>

Naturalmente non funzionerà se la tua WP_Query non è costruita correttamente.

25 set 2015 23:19:43
Commenti

Nota che "showposts" è stato deprecato dalla versione 2.1 di WP (cioè, tempi antichi).

CK MacLeod CK MacLeod
26 set 2015 00:10:45

Ho aggiornato con il tuo codice ma ancora non funziona. :/

Paulo Gabriel Paulo Gabriel
26 set 2015 01:09:29

Hai letto la pagina del codex sulla paginazione? In particolare questa parte: https://codex.wordpress.org/Pagination#Adding_the_.22paged.22_parameter_to_a_query

shanebp shanebp
26 set 2015 01:39:19
1

Qui il mio post type è 'news_events', la paginazione verrà visualizzata dopo ogni 4 titoli di post mostrati.

$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('&laquo; Più recenti',$wp_query->max_num_pages); ?>
      <?php next_posts_link('Più vecchi &raquo;',$wp_query->max_num_pages); ?>
    </nav>
    <?php wp_reset_postdata(); ?>                           
    <?php else : ?>
        <p><?php _e( 'Spiacenti, al momento non ci sono post di news ed eventi.', 'theme' ); ?></p>
<?php endif; ?>
26 set 2015 08:00:31
Commenti

Per favore aggiungi una spiegazione a questo frammento di codice.

fuxia fuxia
26 set 2015 08:39:52