博客 / WordPress/ WordPress获取分类目录的文章数量

WordPress获取分类目录的文章数量

WordPress获取分类目录的文章数量

获取分类目录的文章总数是 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 核心提供的标准函数,兼容性和可维护性最好。仅在需要根据别名查询或进行非常复杂的自定义查询时,才考虑其他方法。

发表评论

您的邮箱不会公开。必填项已用 * 标注。