You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在短代码中替换硬编码分类别名为动态值?

解决短代码自动获取当前分类文章计数的问题

我来帮你搞定这个问题!要让Ahmed Fouad的分类文章计数短代码自动识别当前分类,我们只需要对原代码做一点针对性修改,让它在没有手动指定分类参数时,自动读取当前页面的分类信息。

修改后的完整短代码

首先找到你主题的functions.php文件(或者存放原短代码的自定义插件文件),替换原短代码函数为以下代码:

function category_post_count_shortcode($atts) {
    // 设定默认参数,同时接收用户传入的category参数
    $atts = shortcode_atts(array(
        'category' => '',
    ), $atts);

    $category_obj = null;

    // 如果用户指定了category参数,优先使用该参数
    if (!empty($atts['category'])) {
        // 按分类别名(slug)获取分类对象
        $category_obj = get_category_by_slug($atts['category']);
        // 如果按别名没找到,尝试按分类名称查找
        if (!$category_obj) {
            $category_obj = get_category_by_path($atts['category'], false);
        }
    } 
    // 如果没指定参数,且当前在分类归档页面,自动获取当前分类
    elseif (is_category()) {
        $category_obj = get_queried_object();
    }

    // 如果成功获取到分类对象,返回文章计数;否则返回0或提示文本
    if ($category_obj && is_a($category_obj, 'WP_Term')) {
        return $category_obj->count;
    } else {
        return '0'; // 你也可以改成类似"未找到分类"的提示文本
    }
}
add_shortcode('category_post_count', 'category_post_count_shortcode');

关键修改说明

  • 参数优先级处理:如果用户手动传入了category参数(比如[category_post_count category="computers"]),短代码还是会优先使用这个指定的分类,完全兼容原来的用法。
  • 自动识别当前分类:当没有传入参数时,通过is_category()判断是否处于分类归档页面,再用get_queried_object()获取当前的分类对象,从而自动拿到该分类的文章计数。
  • 容错处理:增加了分类查找的容错逻辑,如果按别名没找到分类,会尝试按名称查找;如果最终没找到有效分类,返回0(你可以根据需求改成自定义提示文本)。

使用方法

现在你可以直接在分类归档页面使用以下代码,无需硬编码分类名:

<?php echo do_shortcode('[category_post_count]'); ?>

当然,你依然可以保留原来的用法,手动指定特定分类:

<?php echo do_shortcode('[category_post_count category="computers"]'); ?>

内容的提问来源于stack exchange,提问作者Andreas3204

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 06:23:00