救援公共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,这样就不必每次需要时都查询计数。