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

借助PolyLang实现购物车关键词多语言更新(AJAX/WooCommerce)

解决WooCommerce AJAX购物车中“product/products”的PolyLang多语言翻译问题

嗨,我来帮你搞定这个多语言翻译的问题!其实不用写一堆复杂的pll_current_language()条件判断,利用PolyLang自带的翻译函数就能优雅解决,还能轻松适配后续新增的语言。下面是具体的实现步骤:

1. 用PolyLang的单复数翻译函数替换硬编码文本

PolyLang提供了pll_n()函数,专门用来处理单复数的翻译逻辑,它会根据你传入的数量自动切换单复数形式,同时匹配当前语言的翻译内容。

把你之前定义$item这类变量的代码,替换成下面的写法:

// 获取购物车商品总数
$cart_count = WC()->cart->get_cart_contents_count();

// 用pll_n处理单复数翻译:参数分别是单数文本、复数文本、数量
$item_label = pll_n('product', 'products', $cart_count);

这样不管用户切换到哪种语言,只要你在PolyLang后台配置了对应翻译,$item_label就会自动输出正确的文本。

2. 确保AJAX请求能识别当前语言

AJAX请求默认可能不会携带语言上下文,所以需要在你的AJAX回调函数开头,手动设置当前语言,避免翻译失效。我们可以从PolyLang的cookie或者前端传入的参数里获取语言标识:

add_action('wp_ajax_update_cart', 'custom_update_cart_callback');
add_action('wp_ajax_nopriv_update_cart', 'custom_update_cart_callback');

function custom_update_cart_callback() {
    // 优先从POST参数获取语言,其次从PolyLang的cookie读取
    if (isset($_POST['lang'])) {
        pll_set_language($_POST['lang']);
    } elseif (isset($_COOKIE['pll_language'])) {
        pll_set_language($_COOKIE['pll_language']);
    }

    // 你的购物车更新逻辑
    $cart_count = WC()->cart->get_cart_contents_count();
    $item_label = pll_n('product', 'products', $cart_count);
    $cart_total = WC()->cart->get_cart_total();

    // 返回JSON格式的响应
    wp_send_json([
        'count' => $cart_count,
        'item_text' => sprintf('%d %s', $cart_count, $item_label),
        'total' => $cart_total
    ]);

    wp_die(); // 必须加上,结束AJAX请求
}

3. (可选)前端AJAX请求携带语言参数

如果你的站点cookie机制有特殊设置,也可以在前端发送AJAX请求时主动带上当前语言标识,确保后端能准确识别:

// 获取当前语言(可以从PolyLang的全局变量或HTML的lang属性获取)
const currentLang = pll_current_language || document.documentElement.lang;

jQuery.ajax({
    url: ajax_object.ajax_url, // 替换成你的AJAX URL
    type: 'POST',
    data: {
        action: 'update_cart',
        lang: currentLang
    },
    success: function(response) {
        // 更新页面上的购物车元素
        $('.cart-count').text(response.count);
        $('.cart-item-text').text(response.item_text);
        $('.cart-total').text(response.total);
    }
});

4. 在PolyLang后台配置翻译

最后一步,别忘了去PolyLang的翻译界面,找到product和products这两个字符串,添加对应语言的翻译内容。如果你的代码里用了自定义文本域,记得在PolyLang的设置里把这个文本域标记为可翻译的。

这样修改后,用户切换语言时,购物车的“product/products”文本就会自动同步翻译了,而且比硬写条件判断灵活得多,后续加新语言也不用改代码~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:30:05