统计附加了特定分类术语的帖子

时间:2013-07-03 作者:rwzdoorn

当升级我们的投资组合时,我正在寻找能够显示某个帖子类型(当前)类别中帖子数量的东西。

示例:我有一个带有“features”的类别。每个功能都有自己的描述、应用程序相关和博客相关的帖子页面

我正在使用以下内容获取当前类别:

<?php $cat_id = get_query_var(\'cat\'); ?>
并通过以下方式获取帖子:

 <?php query_posts("post_type=apps&cat=$cat_id&showposts=3");?>
如何计算post\\u type=apps和category=$cat\\u id的帖子?

很抱歉,我缺乏PHP/WP经验。。有人知道如何让这两件事起作用吗?

提前谢谢。

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

救援公共API

category 是一种已经内置的分类法。因此,很容易用get_terms( $tax, array( /* args */ ) );

$terms = get_terms( \'category\', array(
    \'fields\' => \'count\',
) );
这会很快完成COUNT (*) 查询,这样您就不必担心性能了。

替代解决方案

您也可以对get_terms() 然后改变selects 使用过滤器:

// The core filter:
apply_filters( \'get_terms_fields\', $selects, $args )

// Example callback:
add_action( \'get_terms_fields\', \'wpse105174_get_terms_fields_cb\', 10, 2 );
function wpse105174_get_terms_fields_cb( $selects, $args )
{
    return array( \'t.term_id\', \'COUNT(*)\' );
}
。。。哪里$selects 是aan数组(将内爆为逗号分隔的字符串)。

然后,您可以进一步修改查询并将其限制为仅限于某些特定类别(术语/分类),并使用WHERE t.slug = whatever

// The core filter:
apply_filters( \'terms_clauses\', compact( $pieces ), $taxonomies, $args );

// Example callback:
add_action( \'terms_clauses\', \'wpse105174_terms_clauses_cb\', 10, 3 );
function wpse105174_terms_clauses_cb( $pieces, $taxonomies, $args )
{
    $pieces[\'where\'] = " WHERE t.slug = whatever";
    // Or do some `str_replace`, `preg_replace`, whatever fits in here

    return $pieces;
}
您可以设置$pieces[\'join\'] = \'\'; 如果您不需要访问term_taxonomy-桌子

缓存它

最后,您可以利用Transients API 将结果(作为序列化数组)保存到DB,这样就不必每次需要时都查询计数。

SO网友:Rarst

对于这样的事情,帖子的数量缓存在category对象中。在archivve类别中,这样的事情应该是最简单的:

$category = get_queried_object();
// $category->count has count
如果您试图通过该循环检索类别中的所有帖子,您应该使用posts_per_page=-1, -1 适用于所有人和posts_per_page 是较新的替代品showposts.

要创建指向类别存档的链接,可以使用get_category_link() 作用

SO网友:rwzdoorn

开始时遇到了一些麻烦,但这对我很有用:

<?php $posts = get_posts("post_type=apps&cat=$cat_id"); 
$count = count($posts); 
 echo "$count"; 
?>

SO网友:Md Toufiqul Islam

您可以在query\\u posts之后使用$post变量的post count作为

query_posts("post_type=apps&cat=$cat_id&showposts=3");
echo $post->post_count;
我想您是在一个类别页面中,因为您是从get\\u query\\u var(\'cat\')获取类别id的。那么,对于三个以上的帖子,你真正想要的是什么?你能解释一下吗?

结束

相关推荐

wordpress taxonomy results

我正在使用分类法。php从数据库中获取一些行。在分类法页面上,函数get\\u queryed\\u object()显示我从数据库中得到了正确的结果,但wordpress循环if ( have_posts() ) : while ( have_posts() ) : the_post(); 正在循环数据库中的所有行。have\\u posts()是否总是迭代数据库中的所有行?编辑:query_posts(\"post_type=taxonomy_name&posts_per_page=6\");