如何用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
相关产品推荐
相关产品推荐

