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

如何用Google Translation API翻译WooCommerce分类且不设全站多语言

WooCommerce产品分类翻译问题解决指南

一、500错误的排查与代码修复

你的代码出现500错误主要有几个原因:变量作用域问题、URL未编码、分类更新方式不符合规范、缺少错误处理。下面是修复后的代码:

<?php
$api_key = 'AIzaSyBOti4mM-6x9xxxxxxxxxxxxxxxxxx';

function translate_category_names_using_google_translate($api_key, $source_language, $target_language, $category_name) {
    // 对分类名做URL编码,避免特殊字符破坏请求
    $encoded_name = urlencode($category_name);
    $url = "https://translation.googleapis.com/language/translate/v2?key={$api_key}&source={$source_language}&target={$target_language}&q={$encoded_name}";

    $response = wp_remote_get($url);

    if (is_wp_error($response)) {
        error_log('Google翻译API请求失败: ' . $response->get_error_message());
        return false;
    }

    $json = json_decode($response['body'], true);
    
    // 检查API返回是否包含错误信息
    if (isset($json['error'])) {
        error_log('Google翻译API返回错误: ' . $json['error']['message']);
        return false;
    }
    
    // 确保翻译结果存在
    if (!isset($json['translations'][0]['translatedText'])) {
        error_log('翻译结果解析失败');
        return false;
    }

    return $json['translations'][0]['translatedText'];
}

function translate_category_names() {
    global $api_key; // 引入全局API密钥变量
    
    // 获取所有产品分类,确保返回完整的term对象
    $categories = get_terms(array(
        'taxonomy' => 'product_cat',
        'hide_empty' => false, // 可根据需求调整是否包含无产品的分类
        'fields' => 'all'
    ));

    if (is_wp_error($categories)) {
        error_log('获取产品分类失败: ' . $categories->get_error_message());
        return;
    }

    foreach ($categories as $category) {
        $name = $category->name;
        $translated_name = translate_category_names_using_google_translate($api_key, 'pl', 'lt', $name);
        
        if (!empty($translated_name) && $translated_name !== $name) {
            // 使用WordPress官方函数更新分类,替代直接修改对象保存
            $update_result = wp_update_term($category->term_id, 'product_cat', array(
                'name' => $translated_name
            ));
            
            if (is_wp_error($update_result)) {
                error_log('更新分类「' . $category->name . '」失败: ' . $update_result->get_error_message());
            } else {
                echo $translated_name . "<br>";
            }
        }
    }
}

// 确保在WordPress环境内运行,避免直接访问PHP文件报错
if (defined('ABSPATH')) {
    translate_category_names();
}
?>

修复要点:

  • 解决了函数无法访问全局$api_key的问题
  • 对分类名称做URL编码,避免特殊字符导致请求失效
  • 增加了详细的错误日志,方便排查API调用或分类更新问题
  • 使用wp_update_term()替代直接修改对象保存,符合WordPress/WooCommerce的操作规范
  • 增加环境检查,防止直接运行PHP文件引发错误

二、无需全站多语言插件的翻译方案

如果不想用全站多语言插件,有几种轻量方式:

  • 自定义字段存储翻译:给产品分类添加自定义字段(比如lt_category_name),存储翻译后的名称,然后通过get_the_terms或woocommerce_product_categories_widget_args等钩子,在前端显示时替换为翻译内容,不修改原始分类名。
  • 批量导出翻译再导入:用WordPress自带的导出工具导出产品分类,把分类名复制到Google表格用内置翻译功能批量处理,再导回网站更新。
  • 轻量专项翻译插件:选择只针对WooCommerce产品和分类的翻译插件,这类插件不会重构全站,只处理电商相关内容。

三、WP All Import的可用功能

你正在使用的WP All Import有几个相关功能可以利用:

  • 导入时实时翻译:在导入设置中,针对分类名/产品名字段选择「自定义代码」,调用Google Translation API(类似你写的函数),导入过程中自动翻译并保存。
  • 导出+外部翻译+导入:先用WP All Export导出产品分类数据,用外部工具(比如Google表格、DeepL)批量翻译后,再用WP All Import导入覆盖原有分类信息。
  • 第三方扩展集成:WP All Import有第三方扩展可以直接对接翻译服务,不需要自己写代码,在导入界面就能选择源语言和目标语言,自动完成翻译。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 06:17:25