Como fazer get_next_post () retornar primeiro post ao visualizar o último

4

Eu preciso de um link para o primeiro e o último post (CPT) criado.

Por exemplo, estou no último post e, se clicar em "próximo", devo ir para o primeiro.

Agora eu tenho isso

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

Eu preciso de algo como else: go to first post .
Eu faria o mesmo quando estou no primeiro post e quando clico no "anterior" vou para o ultimo.

EDIT:

Encontrei um trecho de código que definiu a ordem da navegação por meio de postagem única como menu_order , então talvez a solução agora seja diferente.
Aqui o código do que estou falando

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

1 resposta

4

Firts / última postagem faz sentido se tivermos um pedido para nos referirmos. get_next_post() function use post date para decidir qual post é o próximo. Opcionalmente, use também taxonomia, mas uma vez que você usa a função sem nenhum argumento, somente a data é relevante, então o primeiro post é o post mais recente no mesmo tipo de postagem . / p>

Para obter a postagem mais recente, você pode usar uma nova WP_Query , get_posts ou wp_get_recent_posts .

Exemplo usando o ú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;
    
por gmazzap 24.04.2014 / 15:50