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

如何将ACF字段的逗号分隔字符串用于str_ireplace?WordPress过滤器问题

问题分析&解决方案

嘿,我一眼就发现问题所在啦!你代码里的核心问题出在对数组类型的误解上:

  • 你用explode(",", $censored)把逗号分隔的字符串转成数组后,得到的是索引数组(比如["脏话1", "脏话2"]),而不是关联数组。
  • 这时候调用array_keys($censored)拿到的是[0, 1]这类数字键,根本不是你要过滤的违禁词,自然没办法正确替换啦!

修正后的代码

下面是调整后的完整代码,还顺便处理了可能的空格问题(比如字段里的"脏话1, 脏话2"带空格的情况):

function customforumcontent($content) {
    // 获取逗号分隔的违禁词字符串
    $censored_str = get_field('banned_words_list', 'option');
    
    // 先判断字段是否为空,避免后续出错
    if (empty($censored_str)) {
        return $content;
    }
    
    // 分割成数组,并去除每个词前后的空格
    $censored_words = array_map('trim', explode(",", $censored_str));
    
    // 替换内容
    $replace = '<b>[censored]</b>';
    $content = str_ireplace($censored_words, $replace, $content);
    
    return $content;
}
add_filter('asgarosforum_filter_post_content', 'customforumcontent');

关键改进点

  • 去掉了错误的array_keys调用,直接把清洗后的违禁词数组传给str_ireplace,因为这个函数支持直接用数组作为查找目标。
  • 用array_map('trim', ...)处理每个违禁词,避免因为逗号后带空格导致匹配失败(比如用户输入"傻X, 笨蛋"时,不会出现匹配不到"笨蛋"的情况)。
  • 增加了空值判断,当后台没设置违禁词时直接返回原内容,避免不必要的数组操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 18:52:35