WordPress中functions.php加载内容的href用ACF短代码引号冲突如何解决
问题根因
你遇到的截断是引号嵌套冲突+短代码未解析两个问题共同导致的:
- 你的HTML字符串外层用双引号包裹,
href属性用了单引号,ACF短代码的field参数又用了单引号,三层嵌套导致单引号提前闭合,字符串被截断。 - 直接把ACF短代码写在PHP字符串中,WordPress不会自动解析短代码,会直接输出短代码原文。
修复方案
方案1:保留短代码写法(快速修复)
调整引号转义规则,同时用do_shortcode函数解析短代码:
function my_editor_content( $content ) { $content = do_shortcode("<h3>Title</h3><p>text</p> <a href='[acf field=\"afas_url\"]' target='_blank' rel='noopener'><button>Solliciteer Nu</button></a>"); return $content; }
改动说明:
- 短代码内部的双引号用
\转义,避免和外层字符串的双引号冲突 - 用
do_shortcode()包裹HTML内容,触发WordPress的短代码解析逻辑
方案2:使用ACF原生PHP函数(更稳定)
直接调用get_field()获取字段值,完全规避引号嵌套问题,同时符合WordPress编码规范:
function my_editor_content( $content ) { // 获取自定义字段值,为空时设置默认锚点避免无效链接 $afas_url = get_field('afas_url') ?: '#'; $content = "<h3>Title</h3><p>text</p> <a href='".esc_url($afas_url)."' target='_blank' rel='noopener'><button>Solliciteer Nu</button></a>"; return $content; }
改动说明:
- 用
esc_url()对URL做安全转义,规避XSS风险 - 逻辑更直观,没有短代码解析的额外开销
补充说明
如果要仅在招聘列表页生效,可在函数内部增加页面判断逻辑,比如:
if ( is_post_type_archive('job') ) { // 将job替换为你招聘内容的自定义文章类型别名 // 执行内容修改逻辑 }
记得要把函数挂载到对应钩子上,比如在functions.php中追加:add_filter('the_content', 'my_editor_content');
内容的提问来源于stack exchange,提问作者Tom
相关产品推荐
相关产品推荐

