使用wp_insert_post()向ACF块存入内容时换行失效,求解决方案
解决ACF块中wp_insert_post()无法保存换行的问题
问题说明
需要通过wp_insert_post()将包含换行符、单/双引号、HTML标签及短代码的数据保存到ACF自定义块中,但当前代码生成的块无法正确显示换行效果。
原代码问题分析
- 未定义变量错误:
getPostContent()函数返回语句中使用的$name变量未赋值,应替换为$dataToSave['name']确保块类型正确。 - 字符串换行处理不当:PHP单引号字符串中的硬换行未被正确转换为JSON可识别的
\n,导致换行失效。 - 语法错误:
$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标签与引号,无需手动写实体编码(如<)。 - 语法修正:修复数组中的标点错误,保证
wp_insert_post()正常执行。
验证效果
修正后生成的块内容将与后台ACF编辑器生成的格式完全一致,main_text中的换行符会被正确保存并在块编辑器中显示为换行。
内容的提问来源于stack exchange,提问作者Matteor
相关产品推荐
相关产品推荐

