统计无自定义帖子类型的帖子数

时间:2018-02-21 作者:jjycjn

我使用“custom type post UI”插件制作了一个自定义帖子类型,比如“movie”,并将其与内置类别链接。普通帖子和自定义类型帖子都属于同一类别。我的问题是,是否可以修改现有的计数函数,以便它统计没有帖子类型“电影”的帖子数量,即只统计正常帖子。

例如,我的一个类别,比如“业余爱好”,有5个普通帖子+3个自定义“电影”帖子。然后,在category小部件中,我想要像“hobby(5)”,而不是“hobby(8)”。简而言之,如果可能的话,我只想添加一个函数(比如add\\u filter或add\\u action等…)在函数中。php来解决这个问题。

提前谢谢你。

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

一种方法是运行以下两个自定义查询:

$normal_post_args = array(
  \'post_type\' => \'post\',
  \'category_name\' => \'hobby\'
);
$normal_posts_query = new WP_Query( $normal_post_args );

$movie_post_args = array(
  \'post_type\' => \'movie\',
  \'category_name\' => \'hobby\'
);
$movie_posts_query = new WP_Query( $movie_post_args );


echo "Posts (" . $normal_posts_query->found_posts . ")";
echo "Movies (" . $movie_posts_query->found_posts . ")";
这应该会让你Posts (5)Movies (3). 这是一个起点。然后,只需将其包装到函数中并在模板文件中引用即可。

<小时>Update: 根据您的评论,我能想到的最好的方法是创建您自己的类别列表,而不是使用默认的WP列表。

类似这样:

$categories = get_terms( \'category\');
if($categories):
  echo "<ul>";

  foreach($categories as $cat):

    $cat_posts = get_posts(\'post_type=movie&category=\' . $cat->term_id . \'&numberposts=-1\'); 
    if($cat_posts):
      echo "<li>" . $cat->name;
      $count = count($cat_posts); 
      echo " ($count)"; 
      echo "</li>";
    endif;

  endforeach;

  echo "</ul>";
endif;

SO网友:Johansson

@dkeeling的答案是有效的,而且有效。但是,如果您使用WP_Query() 您还应该使用wp_reset_postdata() 然后重置查询并防止与其他查询混淆。

如果您愿意,可以使用get_posts() 相反,它将帖子作为一个数组返回,您可以使用本机PHP对其进行计数count() 功能:

 // Get an array of posts
 $posts = get_posts ( \'numberposts=-1&post_type=movie&category_name=hobby\' );

 // Count the posts
 $numbers = count ( $posts );
这样,您就不需要额外的wp_reset_postdata().

确保还设置了numberpostsposts_per_page 检索所有帖子。否则,检索到的帖子数量将限制为默认的5篇,或您在Reading “常规选项”部分。

结束

相关推荐

wp_list_categories + widget

使用下面的代码,我添加了一个span标记,并将类别计数放置在链接中。add_filter(\'wp_list_categories\', \'cat_count_span\'); function cat_count_span($links) { $links = str_replace(\'</a> (\', \'<span>\', $links); $links = str_replace(\')\', \'<