如何正确输出 ACF 字段中的 HTML 内容(避免纯文本显示)

如何正确输出 ACF 字段中的 HTML 内容(避免纯文本显示)

wordpress 中使用 acf 时,若 `echo` 输出的 html 标签未被渲染而仅显示为纯文本(如带引号的字符串),通常是因为误用了 `the_sub_field()`(直接输出并返回 void),应改用 `get_sub_field()` 获取原始值后再安全输出。

ACF 提供了两组核心字段获取函数:the_*_field() 和 get_*_field()。它们的关键区别在于:

  • the_sub_field(‘field_name’):立即输出内容并返回 null(无返回值),常用于模板中“即取即显”的场景;
  • get_sub_field(‘field_name’):返回字段值(字符串)而不自动输出,适合赋值给变量、条件判断或进一步处理。

在你的原始代码中:

the_sub_field() 执行时已将内容直接输出到页面(可能出现在

外部或不可见位置),同时 $process_title 实际被赋值为 null。因此后续 if(!empty($process_title)) 恒为 false,整个

结构被跳过;即使条件成立,echo $process_title 输出的也是 null 或空字符串——这正是你看到“只有引号内纯文本”或结构完全缺失的根本原因。

✅ 正确写法如下(使用 get_sub_field):

立即学习前端免费学习笔记(深入)”;

改图鸭AI图片生成

改图鸭AI图片生成

改图鸭AI图片生成

下载



    

⚠️ 重要补充建议

  • 使用 wp_kses_post() 包裹输出,既保留 ACF 允许的常用 HTML(如 , ,

    等),又防止 XSS 风险,比裸 echo 更安全;

  • 若字段内容明确不含 HTML(如仅标题文本),可简化为 esc_html($process_title);
  • 确保该代码位于 ACF 的 have_rows() / the_row() 循环内(如 Repeater 或 Flexible Content 子字段上下文),否则 get_sub_field() 将返回 false。

总结:始终根据使用场景选择 ACF 获取函数——需赋值/判断/加工时用 get_*_field();仅需简单插入内容时才用 the_*_field()。一次函数误用,可能导致整个区块渲染失效。

https://www.php.cn/faq/2000850.html

发表回复

Your email address will not be published. Required fields are marked *