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

如何修改WooCommerce产品标题替换PHP脚本以支持多关键词批量替换

WooCommerce 产品标题替换脚本调整方案

问题1:保证所有匹配内容正常替换的调整方法

你现有脚本的核心问题是未限制钩子生效范围,会误替换全站所有内容的标题,调整逻辑如下:

  • 加生效范围判断:通过get_post_type判断当前内容为产品,同时加!is_admin()避免后台的产品标题也被替换,符合绝大多数场景的使用需求。
  • 大小写匹配适配:原生str_replace是大小写敏感的,如果需要兼容不同大小写的匹配(比如同时匹配Mens Watch/mens watch/MENS WATCH),把str_replace替换为str_ireplace即可。
  • 动态替换/永久修改区分:你现在用的方案是前端显示时动态替换,不会修改数据库存储的原始标题,如果需要永久修改所有产品的存储标题,可使用后文给出的一次性批量更新脚本。

调整后的单关键词替换可用代码:

add_filter( 'the_title', 'change_product_title', 10, 2 );
function change_product_title( $title, $id ) {
    // 仅前端产品标题生效,不需要限制后台的话删掉!is_admin()判断即可
    if ( ! is_admin() && get_post_type( $id ) === 'product' ) {
        $find = 'Mens Watch';
        $replace_with = 'Herreur';
        $title = str_replace( $find, $replace_with, $title );
    }
    return $title;
}

问题2:多关键词批量同步替换实现

str_replace原生支持数组参数,只需要把查找词、替换词按一一对应关系写成数组即可,代码示例如下:

add_filter( 'the_title', 'change_product_title', 10, 2 );
function change_product_title( $title, $id ) {
    if ( ! is_admin() && get_post_type( $id ) === 'product' ) {
        // 查找词数组,和下方替换词按顺序一一对应
        $find = [
            'Mens Watch',
            'Womens Watch',
            'Kids Watch'
        ];
        $replace_with = [
            'Herreur',
            'Dameur',
            'Børneur'
        ];
        // 批量替换所有匹配项
        $title = str_replace( $find, $replace_with, $title );
    }
    return $title;
}

注意事项

如果查找的关键词存在包含关系,需要把更长的关键词放在数组靠前位置,比如要同时替换Mens Watch Premium和Mens Watch,要把Mens Watch Premium放在$find数组的前面,避免短关键词先被替换后长关键词无法匹配。

可选:永久修改数据库产品标题脚本

如果需要直接修改数据库中存储的产品标题,不需要每次加载动态替换,可以使用以下一次性脚本,管理员登录后访问后台执行一次即可,执行完立刻删除脚本:

add_action('admin_init', 'batch_update_product_titles');
function batch_update_product_titles() {
    // 仅管理员可执行
    if (!current_user_can('manage_options')) return;
    
    $products = get_posts([
        'post_type' => 'product',
        'posts_per_page' => -1,
        'post_status' => 'any'
    ]);

    // 按需求配置查找和替换数组
    $find = [
        'Mens Watch',
        'Womens Watch'
    ];
    $replace_with = [
        'Herreur',
        'Dameur'
    ];

    foreach ($products as $product) {
        $updated_title = str_replace($find, $replace_with, $product->post_title);
        if ($updated_title !== $product->post_title) {
            wp_update_post([
                'ID' => $product->ID,
                'post_title' => $updated_title
            ]);
        }
    }
    echo '所有产品标题批量更新完成,现在请删除该段代码';
    die;
}

内容的提问来源于stack exchange,提问作者Dev.Hjer.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 03:09:00