在 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;
注意:这两种方法获取出来的数据是一样的,采用其中的任意一种就可以了。