使用PolyLang更新购物车中的关键字(AJAX / WooCommerce)

时间:2018-04-20 15:56:35

标签: php ajax wordpress woocommerce polylang

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

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

但是,使用此功能无法正常工作。这就是我设置它的方式:

的functions.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中使用那个钩子,或者我错过了什么?您对如何使这项工作有任何建议吗?

1 个答案:

答案 0 :(得分: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);
}

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