获取分类目录的文章总数是 WordPress 主题开发中一个常用的功能。实现这个功能有多种方法,下面将介绍几种标准且实用的方案。
获取当前分类的文章数量
在分类归档页面(如 category.php)中,可以直接获取当前所浏览分类的文章数量。
<?php
global $wp_query;
$cat_ID = get_query_var('cat');
$category = get_category($cat_ID);
echo $category->count;
?>
代码解析:
get_query_var('cat')获取当前分类页面的分类 ID。get_category($cat_ID)根据分类 ID 获取分类对象。$category->count是该分类对象的一个属性,直接输出文章数量。
除了 count,分类对象还包含其他有用属性,例如:
$category->slug:分类别名。$category->name:分类名称。$category->term_id:分类 ID。
获取指定分类的文章数量
以下方法可以在任何页面或模板中获取指定分类的文章数量。
方法一:使用 get_category() 函数
这是最直接和推荐的方法,通过分类 ID 获取分类对象并读取其 count 属性。
<?php
// 将 `cat_ID` 替换为你的目标分类 ID
$category = get_category(cat_ID);
echo $category->count;
?>
方法二:使用 get_category_by_slug() 函数
如果你知道分类的别名(slug),可以使用此方法。
<?php
// 将 'category-name' 替换为你的分类别名
$category = get_category_by_slug('category-name');
if ($category) {
echo $category->count;
}
?>
注意: 建议先检查 $category 是否存在,避免别名错误导致致命错误。
方法三:使用 get_posts() 函数
通过查询获取该分类下的所有文章,然后计数。这种方法更灵活,可以在计数同时获取文章数据,但性能开销相对较大。
<?php
$args = array(
'category' => 3, // 分类ID
'posts_per_page' => -1, // 获取所有文章
'fields' => 'ids', // 仅获取文章ID,提升性能
);
$posts = get_posts($args);
echo count($posts);
?>
方法四:直接查询数据库(高级)
对于需要极高性能或复杂逻辑的场景,可以直接操作数据库。以下是一个封装好的函数示例:
<?php
function wt_get_category_count($input = '') {
global $wpdb;
if (empty($input)) {
// 在主循环中调用,返回第一个分类的文章数
$category = get_the_category();
return (isset($category[0])) ? $category[0]->count : 0;
} elseif (is_numeric($input)) {
// 输入为分类ID
$SQL = $wpdb->prepare(
"SELECT count FROM {$wpdb->term_taxonomy} WHERE term_id = %d AND taxonomy = 'category'",
$input
);
return $wpdb->get_var($SQL);
} else {
// 输入为分类别名(slug)
$SQL = $wpdb->prepare(
"SELECT tt.count FROM {$wpdb->terms} AS t INNER JOIN {$wpdb->term_taxonomy} AS tt ON t.term_id = tt.term_id WHERE t.slug = %s AND tt.taxonomy = 'category'",
$input
);
return $wpdb->get_var($SQL);
}
}
?>
使用说明: 将以上代码添加到主题的 functions.php 文件中,然后在模板中按需调用:
// 1. 在主循环中调用,不传参
<?php echo wt_get_category_count(); ?>
// 2. 传入分类ID
<?php echo wt_get_category_count(1); ?>
// 3. 传入分类别名
<?php echo wt_get_category_count('hello-world'); ?>
重要改进: 原示例代码存在 SQL 注入风险,且未指定 taxonomy(分类法)。上述代码已使用 $wpdb->prepare() 进行参数安全处理,并限定了 taxonomy = 'category',确保只查询文章分类。
总结
对于大多数场景,推荐使用方法一(get_category())。它代码简洁、性能高效,且是 WordPress 核心提供的标准函数,兼容性和可维护性最好。仅在需要根据别名查询或进行非常复杂的自定义查询时,才考虑其他方法。