在循环和帖子中获取帖子编号

时间:2019-04-14 作者:Garrett Scafani

我有一个帖子类型,本质上是一个摄影杂志。我希望每篇文章在归档页面中显示为一个“问题”,并从最旧到最新关联一个数字。第一期为“第1期”,第十期为“第10期”。我需要在存档页和帖子页本身上都显示此内容。

这是我使用的代码

<?php 
  echo $wp_query->found_posts - $wp_query->current_post ;
但这似乎只适用于归档页面。

2 个回复
最合适的回答,由SO网友:Qaisar Feroz 整理而成

你可以在下面的一个贴子页面上这样做this answer. 代码可能需要一些调整才能满足您的确切要求。

把这个放进去functions.php 你的主题

 class MY_Post_Numbers {

  private $count = 0;
  private $posts = array();

  public function display_count() {
      $this->init(); // prevent unnecessary queries
      $id = get_the_ID();
      echo sprintf( \'<div class="post-counter">Post number<span class="num">%s</span><span class="slash">/</span><span class="total">%s</span></div>\', $this->posts[$id], $this->count );
  }

  private function init() {
      if ( $this->count )
          return;
      global $wpdb;       
      $posts = $wpdb->get_col( "SELECT ID FROM $wpdb->posts WHERE post_status = \'publish\' AND post_type = \'post\' ORDER BY post_date " ); // can add or change order if you want 
      $this->count = count($posts);

      foreach ( $posts as $key => $value ) {
          $this->posts[$value] = $key + 1;
      }
      unset($posts);
  }

}

$GLOBALS[\'my_post_numbers\'] = new MY_Post_Numbers;

function my_post_number() {
  $GLOBALS[\'my_post_numbers\']->display_count();
}
要在模板文件中使用:

<?php my_post_number(); ?>

SO网友:Nicolai Grossherr

使用API函数是一种选择,在我看来,通常更可取。作为计数,归档页面上的编号不是问题,这涉及到如何在单个帖子的视图中进行编号。这不是现成的代码,只是一个示例性的大纲:

$current_posts_id = get_the_ID();
$wp_query_obj = new WP_Query(
    [
        //other conditions to determine order
        //use the same as for the archive page, otherwise the numbering differs

        //use parameter fields to get an array of
        //keys numerically indexed, with value post id
        \'fields\' => \'ids\'
    ]
);
//get the numerically array of post ids into its own variable
$wp_query_posts_array = $wp_query_obj->posts;
//search array by value, which is the post id, and return corresponding key, numeric index
$wp_query_posts_array_index = array_search( $current_posts_id, $wp_query_posts_array );
//the array index starts with 0, add one for the issue numbering
$current_posts_issue_number = $wp_query_posts_array_index + 1;
注意:如果您想即时获取发行号,当然可以这样做。一般来说,如果您希望或必须更频繁地使用问题编号,或者希望在可以使用问题编号的地方进行查询,我可能会引入一个post meta来存储问题编号。但这只是我对可能必要的代码、数据结构设计选择的想法。

相关推荐

“POSTS_WHERE”筛选器未在`wp_ajax`中应用“WP_Query”

我有一个函数,它添加了posts_join 和aposts_where 在中搜索WP_Query. 它在普通的php呈现的搜索页面上运行良好。然而,我也将其用于ajax产品搜索和其他posts_join 和aposts_where 似乎不适用。以下是连接和位置:function search_by_meta_join($join) { global $wpdb; if (is_search()) { $join .= \" LEFT JOI