要计数only published 发布类别,很容易获得count
类别对象的参数。但是,请注意,如果类别与某些CPT关联,则计数是属于特定术语的所有职位的总数,无论它们是什么post\\u类型。
$cat = get_category(\'blog\');
$post_with_blog_category = $cat->count;
如果您还想计算其他post状态,唯一的方法是运行
WP_Query
看看找到的帖子数量。您可以使用函数使其更加灵活和可重用:
function count_posts_by_tax( $term = \'\', $tax = \'category\', $type = \'post\' ) {
if ( empty( $term ) ) return false;
$q = new_WP_Query( array(
\'post_type\' => $type,
\'post_status\' => \'any\',
\'posts_per_page\' => -1,
\'tax_query\' => array(
array(
\'taxonomy\' => $tax,
\'terms\' => array($term),
\'field\' => is_int($term) ? \'id\' : \'slug\'
)
)
) );
if ( ! $q->found_posts ) return 0;
$statuses = wp_list_pluck( $q->posts, \'post_status\' );
return (object) array_count_values( $statuses );
}
现在您可以这样使用它:
$count = count_posts_by_tax(\'blog\');
$published_blog_posts = $count->publish;
$private_blog_posts = $count->private;
$prending_blog_posts = $count->pending;
$draft_blog_posts = $count->draft;
函数足够灵活,可以用于除category以外的其他分类法,也可以用于除standard post以外的其他post类型,只需将第2个和第3个参数传递给函数即可。
Please note 该函数运行SQL查询来检索所有状态下的所有帖子……如果有数百篇帖子,它可能会非常慢,并且会持续影响页面加载。
如果您有很多帖子,并且需要根据类别和不同的帖子状态对其进行计数,我建议您创建一个自定义函数,该函数将挂钩到类别/帖子关联中,并在发生时更新db中的值,可能是选项或瞬态。一旦需要不同post状态的计数,还应该挂接post状态转换以使计数一致。当然,这是一项更长、更复杂的工作,但这项工作的绩效提升是值得的,尤其是如果你有(或计划有)大量的职位。