如何在WordPress短代码中使用ACF?Blade模板环境
当然可以在短代码里使用ACF!你的需求完全可行,不过得调整一下代码写法——因为短代码本质是PHP函数,不能直接用Blade的{{ the_field('text') }}语法,得用ACF的原生PHP函数来获取字段值。
修改后的短代码函数
function highlight($atts) { // 配置短代码可选参数,允许指定目标文章ID $atts = shortcode_atts([ 'post_id' => get_the_ID(), // 默认使用当前页面/文章的ID ], $atts); // 用get_field获取ACF字段值(get_field返回值,适合拼接字符串;the_field会直接输出,这里不适用) $acf_text = get_field('text', $atts['post_id']); // 处理字段为空的情况,设置默认文本兜底 $display_text = $acf_text ?: '默认文本'; // 返回拼接好的HTML,用esc_html转义内容避免XSS风险 return ' <div class="col-lg-6 "> <div class="highlighted"> <p class="page-title">' . esc_html($display_text) . '</p> </div> </div>'; } add_shortcode('scbox', 'highlight');
关键说明
- 为什么用
get_field而非the_field:the_field会直接echo输出内容,而我们需要把字段值嵌入到字符串中返回,get_field刚好返回字段值,完美适配这种场景。 - 可选的
post_id参数:如果需要调用其他文章/自定义帖子的ACF字段,直接在短代码里指定即可,比如[scbox post_id="123"]。 esc_html安全处理:转义字段内容是WordPress开发的安全最佳实践,能防止恶意脚本注入。
Blade模板中调用短代码
Blade的{{ }}会自动转义HTML,而你的短代码返回的是HTML标签,所以要用{!! !!}来输出:
{!! do_shortcode('[scbox]') !!}
如果需要指定特定文章的字段:
{!! do_shortcode('[scbox post_id="456"]') !!}
内容的提问来源于stack exchange,提问作者Dzodzos
相关产品推荐
相关产品推荐

