Cómo make get_next_post () devuelve la primera publicación cuando ve la última

4

Necesito una forma de vincular la primera y la última publicación (CPT) creadas.

Por ejemplo, estoy en la última publicación y si hago clic en "siguiente" debería ir a la primera.

Ahora tengo esto

<?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; ?>

Necesito algo como else: go to first post .
Haría lo mismo cuando estoy en la primera publicación y al hacer clic en "anterior" voy a la última.

EDITAR:

Encontré un fragmento de código que establece el orden de la navegación en una sola publicación como menu_order , por lo que quizás la solución ahora sea diferente.
Aquí el código de lo que estoy hablando

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' );
    
pregunta dborghez 24.04.2014 - 13:59

1 respuesta

4

Firts / last post tiene sentido si tenemos una orden a la que referirnos. La función get_next_post() usa la fecha de publicación para decidir qué publicación es la siguiente. Opcionalmente, también usa taxonomía, pero una vez que use la función sin ningún argumento, solo la fecha es relevante, por lo que first post es la publicación más reciente en el mismo tipo de publicación .

Para obtener la publicación más reciente, puede utilizar un nuevo WP_Query , get_posts o wp_get_recent_posts .

Ejemplo usando este último:

<?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;
    
respondido por el gmazzap 24.04.2014 - 15:50

Lea otras preguntas en las etiquetas