You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用wp_insert_post()向ACF块存入内容时换行失效,求解决方案

解决ACF块中wp_insert_post()无法保存换行的问题

问题说明

需要通过wp_insert_post()将包含换行符、单/双引号、HTML标签及短代码的数据保存到ACF自定义块中,但当前代码生成的块无法正确显示换行效果。

原代码问题分析

  1. 未定义变量错误:getPostContent()函数返回语句中使用的$name变量未赋值,应替换为$dataToSave['name']确保块类型正确。
  2. 字符串换行处理不当:PHP单引号字符串中的硬换行未被正确转换为JSON可识别的\n,导致换行失效。
  3. 语法错误:$postData数组中post_title末尾的分号应为逗号,否则会导致数组解析失败。

修正后的代码

$postData = array(
    'post_type' => 'reports',
    'post_status' => 'draft',
    'post_title' => 'Post Title' // 修正:将分号改为逗号
);
$postData['post_content'] = getPostContent();
$postID = wp_insert_post($postData);

function getPostContent() {
    // 显式处理换行符,确保JSON编码后保留换行结构
    $mainText = "This is the first line\nThis is the line\n[custom-shortcode id=\"5\" caption=\"Title\"]\nAnother line with link <a href=\"\">Link text</a>.";

    $dataToSave = [
        'mode' => 'edit',
        'name' => 'acf/pd-text',
        'data' => [
            'title' => 'Example Block Title',
            'main_text' => $mainText
        ]
    ];

    // 用正确参数编码JSON,保留特殊字符与换行
    $attrs = wp_json_encode($dataToSave, JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_QUOT | JSON_HEX_AMP | JSON_UNESCAPED_UNICODE);
    $attrs = addslashes($attrs);

    // 修正变量引用,使用已定义的块名称
    return '<!-- wp:' . $dataToSave['name'] . ' ' . $attrs . ' /-->';
}

关键修正点

  • 变量修正:将返回语句中的$name替换为$dataToSave['name'],确保块类型匹配。
  • 换行处理:使用双引号字符串显式写入\n,或通过str_replace("\r\n", "\n", $text)统一处理跨平台换行符。
  • 特殊字符处理:依赖wp_json_encode的参数自动转义HTML标签与引号,无需手动写实体编码(如&lt;)。
  • 语法修正:修复数组中的标点错误,保证wp_insert_post()正常执行。

验证效果

修正后生成的块内容将与后台ACF编辑器生成的格式完全一致,main_text中的换行符会被正确保存并在块编辑器中显示为换行。

内容的提问来源于stack exchange,提问作者Matteor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 10:52:03