WordPress编辑器输入验证:阻止含特定字符的文章保存
问题
我需要在主题的functions.php中实现一个功能:当编辑器内容(包括摘要)存在非断空格、特定括号、撇号及编码HTML实体等字符时,直接阻止文章保存/更新,同时给用户显示提示信息。目前已经通过挂载save_post钩子实现了保存后自动清理这些字符的功能,核心代码如下:
$wpdb->update('wp_posts', ['post_excerpt' =>$sanitized_post_excerpt], ['id' => $post_id]);
挂载钩子的代码:
add_action('save_post', 'sm_sanitize_HTML_entities', 99, 3);
现在想改成事前阻止保存,而不是事后清理。
实现方案
可以利用WordPress的wp_insert_post_data钩子(保存前触发,用于过滤/修改提交的文章数据),结合错误提示函数,实现阻止保存并提示用户的效果。
具体实现代码
function sm_block_invalid_chars($data, $postarr) { // 定义需要拦截的字符规则,可根据需求调整 $invalid_patterns = [ '/ /i', // 非断空格HTML实体 '/\xA0/', // 非断空格ASCII字符 '/[(){}【】]/', // 全角括号示例 '/’/', // 智能撇号示例 '/&[a-z0-9]+;/i' // 其他HTML实体(可限定具体实体) ]; // 合并需要检查的内容:正文+摘要 $content_to_check = $data['post_content'] . $data['post_excerpt']; foreach ($invalid_patterns as $pattern) { if (preg_match($pattern, $content_to_check)) { // 添加错误提示 add_settings_error('post_save_errors', 'invalid_chars', '文章内容包含违规字符,请清理后再保存!', 'error'); // 终止保存流程,弹出提示框并返回编辑页 wp_die(get_settings_errors('post_save_errors')[0]['message'], '保存失败', ['back_link' => true]); } } return $data; } // 挂载钩子,优先级设为10,确保在保存前执行 add_filter('wp_insert_post_data', 'sm_block_invalid_chars', 10, 2);
代码说明
wp_insert_post_data钩子在文章保存/更新前触发,接收提交的文章数据和原始POST数组,若抛出错误会直接终止保存流程。$invalid_patterns数组可根据实际需求修改,比如添加或删除需要拦截的字符、实体规则。wp_die会弹出带提示信息的弹窗,并提供返回编辑页面的链接,方便用户修改后重新提交。
内容的提问来源于stack exchange,提问作者MrFacundo
相关产品推荐
相关产品推荐

