web-dev-qa-db-fra.com

Comment get_next_post () renvoie-t-il le premier message lors de l'affichage du dernier

J'ai besoin d'un moyen de créer un lien vers le premier et le dernier message (CPT) créé.

Par exemple, je suis dans le dernier message et si je clique sur "suivant", je devrais aller au premier.

Maintenant j'ai ceci

<?php
$next_post = get_next_post();

if ( ! empty( $next_post ) ) : ?>
  <div id="nextpost" >
    <a href="<?php echo get_permalink( $next_post->ID ); ?>">
    <!-- <?php echo get_the_post_thumbnail( $next_post->ID, 'thumbnail' ); ?> -->
    </a>
    <span class="nav-next">
      <?php next_post_link( '%link', __( 'Next project', 'twentyeleven' ) ); ?>
    </span>
  </div>
<?php endif; ?>

J'ai besoin de quelque chose comme else: go to first post.
Je referais la même chose quand je suis dans le premier post et quand je clique sur "précédent" je passe au dernier.

MODIFIER:

J'ai trouvé un extrait de code qui définit l'ordre de navigation dans le post unique comme le menu_order; la solution est donc peut-être différente.
Voici le code de ce dont je parle

function square_adjacent_post_where($sql) {
  if ( !is_main_query() || !is_singular() )
    return $sql;

  $the_post = get_post( get_the_ID() );
  $patterns = array();
  $patterns[] = '/post_date/';
  $patterns[] = '/\'[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}\'/';
  $replacements = array();
  $replacements[] = 'menu_order';
  $replacements[] = $the_post->menu_order;
  return preg_replace( $patterns, $replacements, $sql );
}
add_filter( 'get_next_post_where', 'square_adjacent_post_where' );
add_filter( 'get_previous_post_where', 'square_adjacent_post_where' );

function square_adjacent_post_sort($sql) {
  if ( !is_main_query() || !is_singular() )
    return $sql;

  $pattern = '/post_date/';
  $replacement = 'menu_order';
  return preg_replace( $pattern, $replacement, $sql );
}
add_filter( 'get_next_post_sort', 'square_adjacent_post_sort' );
add_filter( 'get_previous_post_sort', 'square_adjacent_post_sort' );
4
dborghez

Les premiers/derniers messages ont du sens si nous avons un ordre à renvoyer. La fonction get_next_post() utilise la date de publication pour décider quelle publication est la suivante. Il utilise éventuellement aussi la taxonomie, mais une fois que vous utilisez la fonction sans aucun argument, seule la date est pertinente. Le première publication est la publication la plus récente de la même publication type .

Pour obtenir le message le plus récent, vous pouvez utiliser un nouveau WP_Query , get_posts ou wp_get_recent_posts .

Exemple utilisant ce dernier:

<?php
$next_post = get_next_post();
if ( empty( $next_post ) ) {
  global $post;
  $args = array(
    'numberposts' => 1, 'post_type' => $post->post_type, 'post_status' => 'publish'
  );
  $recent = wp_get_recent_posts( $args, OBJECT );
  $next_post = ! empty( $recent ) ? array_shift( $recent ) : FALSE;
}

if ( ! empty( $next_post ) ) :
  // your code goes here
endif;
4
gmazzap