在 WordPress 数据库中,分类项目是有所属于该分类的文章数量这一项数据的,可是 WordPress 并没有为我们提供获取这个文章数量的函数。在开发WordPress主题或应用的时候,我们偶尔会用到这个数据,下面有两种获取某个分类中的文章数量的方法,有需要的朋友可以根据自己的喜好选用。
直接通过 SQL 查询的方法获取
这种方法是通过 SQL 查询直接获取的,获取到的数据只有该分类下的文章的数量,相对下面的方法来说,要简介一点。
function wizhi_get_category_count($input = '') {
global $wpdb;
if($input == '') {
$category = get_the_category();
return $category[0]->category_count;
}
elseif(is_numeric($input)) {
$SQL = "SELECT $wpdb->term_taxonomy.count FROM $wpdb->terms, $wpdb->term_taxonomy WHERE $wpdb->terms.term_id=$wpdb->term_taxonomy.term_id AND $wpdb->term_taxonomy.term_id=$input";
return $wpdb->get_var($SQL);
}
else {
$SQL = "SELECT $wpdb->term_taxonomy.count FROM $wpdb->terms, $wpdb->term_taxonomy WHERE $wpdb->terms.term_id=$wpdb->term_taxonomy.term_id AND $wpdb->terms.slug='$input'";
return $wpdb->get_var($SQL);
}
}
通过新建 WP_Query 查询的方法获取
这种方法是用了 WordPress 标准的自定义查询方法,获取的数据是该分类下所有文章的对象,有很多不必要的数据,性能上要比上面的方法稍差一点,但是代码更有 WordPress 风格,不会因为 WordPress 数据结构的更改而造成兼容性问题。
if ( ! function_exists( 'wizhi_get_category_count' ) ) :
function wizhi_get_category_count( $cat_id ) {
$q = new WP_Query( array(
'nopaging' => true,
'tax_query' => array(
array(
'taxonomy' => 'category',
'field' => 'id',
'terms' => $cat_id,
'include_children' => true,
),
),
'fields' => 'ids',
) );
return $q->post_count;
}
endif;
注意:这两种方法获取出来的数据是一样的,采用其中的任意一种就可以了。