如何让WordPress自定义分类短码函数实现复用?
动态传入分类参数的WordPress短码修改方案
核心修改思路
让短码回调函数接收并处理传入的category属性,将固定的分类别名替换为动态参数值,实现一个短码适配所有分类的需求。
修改后的完整代码
替换你当前functions.php中的短码代码为以下内容:
function display_category_blogs($atts) { // 定义短码参数及默认值 $atts = shortcode_atts( array( 'category' => '', 'posts_per_page' => 5 // 可根据需求调整默认显示数量 ), $atts, 'blogs' ); // 校验参数:未传入分类时返回提示 if (empty($atts['category'])) { return '<p>请指定分类别名,示例:[blogs category="day-trips"]</p>'; } // 构建动态查询参数 $args = array( 'category_name' => $atts['category'], 'posts_per_page' => $atts['posts_per_page'], 'post_status' => 'publish' ); $query = new WP_Query($args); $output = ''; if ($query->have_posts()) { $output .= '<div class="blog-list">'; while ($query->have_posts()) { $query->the_post(); // 这里的HTML结构可根据你原有代码调整 $output .= '<div class="blog-item">'; $output .= '<h3><a href="' . esc_url(get_permalink()) . '">' . esc_html(get_the_title()) . '</a></h3>'; $output .= '<p>' . esc_html(get_the_excerpt()) . '</p>'; $output .= '</div>'; } $output .= '</div>'; wp_reset_postdata(); // 恢复全局文章数据 } else { $output .= '<p>「' . esc_html($atts['category']) . '」分类下暂无文章</p>'; } return $output; } add_shortcode('blogs', 'display_category_blogs');
关键修改点
- 回调函数新增
$atts参数:用于接收短码传入的所有属性 - 使用
shortcode_atts()设定默认值:确保参数缺失时代码仍能正常运行 - 动态替换
category_name值:将原固定的'day-trips'替换为$atts['category'],实现分类动态切换 - 增加安全转义:用
esc_url()、esc_html()处理输出内容,避免XSS安全风险 - 参数校验:未传入分类时返回友好提示,提升使用体验
使用方法
在文章或页面中直接调用短码,传入目标分类的**别名(slug)**即可:
- 展示Day Trips分类:
[blogs category="day-trips"] - 展示Recipes分类:
[blogs category="recipes"] - 自定义显示数量:
[blogs category="recipes" posts_per_page="10"]
注意事项
- 必须传入分类的别名(slug),而非分类的中文/英文名称,
category_name参数仅识别分类slug - 保留
wp_reset_postdata():避免自定义查询影响后续全局文章数据的调用 - 可根据原有短码的HTML结构调整输出部分的代码,保持样式一致性
内容的提问来源于stack exchange,提问作者LOTUSMS
相关产品推荐
相关产品推荐

