使用TinyMCE cloud在WordPress提交/编辑内容丢失格式如何解决?
问题解决方法
1. 调整TinyMCE初始化配置
在前端TinyMCE的初始化代码中添加以下参数,确保编辑器输出保留<p>标签,不会自动转换为<br>:
tinymce.init({ // 保留原有其他配置项 forced_root_block: 'p', // 强制段落用p标签包裹 convert_newlines_to_br: false, // 禁止换行自动转br remove_linebreaks: false, // 禁止移除换行符 valid_elements: '*[*]', // 也可自定义设置仅保留p、span等需要的标签和属性 keep_styles: true // 保留自定义样式 })
提交表单前可通过tinymce.activeEditor.getContent()输出内容,确认返回结果自带<p>标签。
2. 关闭WordPress默认的内容格式过滤
WordPress默认会对评论、文章内容执行wpautop函数,会把多段<p>标签合并替换为<br>,同时默认评论允许的HTML标签库未包含<p>,会自动过滤p标签,你需要在主题的functions.php文件中添加以下代码:
// 移除评论内容的wpautop自动格式化 remove_filter( 'comment_text', 'wpautop', 30 ); // 移除编辑评论时的wpautop格式化 remove_filter( 'pre_comment_content', 'wpautop' ); // 给评论允许的HTML标签添加p标签,允许class、style等属性按需添加 add_filter( 'comment_allowed_tags', function($allowed_tags) { $allowed_tags['p'] = array( 'class' => true, 'style' => true, 'id' => true ); // 如果需要保留其他标签比如span、h2等,也可以按上面的格式添加 return $allowed_tags; } );
如果前端提交的是自定义文章类型而非评论,把对应钩子替换为文章内容过滤钩子即可:
remove_filter( 'the_content', 'wpautop' ); remove_filter( 'the_excerpt', 'wpautop' );
3. 调整旧内容加载逻辑
编辑已发布内容时,要确保后端返回给TinyMCE的原始内容是未经过wpautop格式化的带<p>标签的源码,不要返回经过处理后带<br>的内容,加载时不需要额外转义HTML标签。
内容的提问来源于stack exchange,提问作者Jodyshop
相关产品推荐
相关产品推荐

