如何在短代码中替换硬编码分类别名为动态值?
解决短代码自动获取当前分类文章计数的问题
我来帮你搞定这个问题!要让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
相关产品推荐
相关产品推荐

