0

这个线程的帮助下,我有一个功能可以显示和更新 WooCommerce 中使用 AJAX 的购物车的金额和总价。我没有想到的问题是我在网站上使用 PolyLang,因此希望在用户更改页面上的语言时翻译“产品”和“产品”的关键字。

我尝试pll_current_language()在 AJAX 调用之前在条件中使用钩子functions.php,然后定义变量$item$items根据当前语言是什么,并将这些关键字插入 AJAX 返回的字符串中。我在模板文件中使用了类似的条件,所以它在那里工作。

但是,此功能无法按预期工作。这就是我的设置方式:

函数.php

function woocommerce_header_add_to_cart_fragment( $fragments ) {
    global $woocommerce;

    ob_start();

    // Cart Translations
    $lang = pll_current_language();
    $item;
    $items;

    if ($lang == 'sv'){
    $item = "produkt";
    $items = "produkter";
    } else if ($lang == 'en') {
        $item = "product";
    $items = "products";
    }

    ?>
    <a class="cart-customlocation wpmenucart" href="<?php echo wc_get_cart_url(); ?>" title="<?php _e( 'View your shopping cart' ); ?>"><?php echo sprintf ( _n( '%d ' . $item, '%d ' . $items, WC()->cart->get_cart_contents_count() ), WC()->cart->get_cart_contents_count() ); ?> - <?php echo WC()->cart->get_cart_total(); ?></a>
    <?php
    $fragments['a.cart-customlocation'] = ob_get_clean();
    return $fragments;
}

add_filter( 'woocommerce_add_to_cart_fragments', 'woocommerce_header_add_to_cart_fragment', 30, 1 );

我遇到的问题是pll_current_language(),即使我访问英文页面,钩子总是返回“sv”。所以看起来我不能在functions.php中使用那个钩子,或者我错过了什么?您对如何完成这项工作有任何建议吗?

4

1 回答 1

1

我一直在寻找相同的解决方案。然后,我才意识到 $lang = pll_current_language(); 没有正确拾取 cookie。所以作为解决方法。我开始为此使用 $_COOKIE。

function sn_get_cart_url() {
    $lang = $_COOKIE['pll_language'];
    $cart_page_id = get_option( 'woocommerce_cart_page_id' );

    if(function_exists('pll_get_post')) {
       $cart_page_id = pll_get_post($cart_page_id, $lang); 
    }
    return get_permalink($cart_page_id);
}

我没有深入挖掘插件编码。但这可能会解决您的问题。

于 2018-04-22T14:14:57.353 回答