如何使GET_NEXT_POST()在查看最后一篇文章时返回第一篇文章

时间:2014-04-24 作者:dborghez

我需要一种方法来链接到第一个和最后一个帖子(CPT)创建。

例如,我在上一篇文章中,如果我单击“in”;“下一步”;我应该去第一家。

现在我有了这个

<?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; ?>
我需要这样的东西else: go to first post.
当我在第一篇帖子中以及单击“时,我会做同样的事情。”;“上一页”;我走到最后。

编辑:

我发现了一段代码,它可以设置单篇文章的导航顺序,如menu_order, 所以现在的解决方案可能不同了<这里是我所说的代码

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\' );

1 个回复
SO网友:gmazzap

如果我们有订单可以参考,那么第一篇/最后一篇文章是有意义的。get_next_post() 函数使用post date来决定下一篇文章是哪篇文章。它还可以选择使用分类法,但一旦您在没有任何参数的情况下使用该函数,则只有日期是相关的,因此第一篇文章是the most recent post in same post type.

要获取最新的帖子,您可以使用新的WP_Query, get_postswp_get_recent_posts.

使用后者的示例:

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

结束

相关推荐

Query posts by content lenght

我使用下面的代码每6小时随机发布一篇我的网站帖子。if ( false === ( $social_trans_post_id = get_transient( \'$social_trans_post_id\' ) ) ) { $args = array(\'numberposts\' => 1, \'orderby\' => \'rand\'); $social_trans = get_posts($args)