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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 08:45:31