web-dev-qa-db-fra.com

Comment redémarrer ma boucle avec get_next_post ()?

Je cherche une méthode de fabrication succincte get_next_post()
revenez au début une fois que vous avez atteint le dernier message.
Actuellement, il s’arrête dès qu’il atteint le dernier poste.

Voici quelques lignes de code du codex
pour un contexte similaire à celui que j'utilise:

    <?php $next_post = get_next_post();
    if (!empty( $next_post )): ?>
    <a href="<?php echo get_permalink( $next_post->ID ); ?>">
            <?php echo $next_post->post_title; ?>
    </a>
    <?php endif; ?>

http://codex.wordpress.org/Function_Reference/get_next_post

Merci en avance pour vos suggestions.

1
Wilhelm

get_next_post ne sait pas vraiment ce qu'est le "début". get_next_post utilise get_adjacent_posts. Si vous regardez la source , vous pouvez voir que cette fonction exécute sa propre requête pour déterminer la prochaine (ou la précédente) publication par rapport à la publication en cours . Il ne parcourt pas une liste.

Pour obtenir le "premier" message, vous devrez exécuter une nouvelle requête en fonction des paramètres que vous jugerez satisfaisants si vous remplissez la condition de retourner le premier message. Quelque chose comme ça:

while (have_posts()) {
  the_post();
  the_title();
  $next_post = get_next_post();
  if (empty($next_post)) {
    echo 'empty'; 
    $args = array(
      'posts_per_page' => 1,
    );
    $first = new WP_Query($args);
    var_dump($first->post);
  }
  echo '<br>';
}

Aussi, "next" et "previous" sont relatifs à l'ordre de tri avec "next" signifiant le plus proche plus récent post. Dans une boucle d'archive par défaut ordinaire, le premier message de la liste n'aura pas de message "suivant". J'imagine que vous voulez réellement utiliser previous_post_link mais c'est une supposition.

1
s_ha_dum