Использование PolyLang для обновления ключевых слов в корзине (AJAX / WooCommerce)

С помощью эта тема У меня есть функция, которая отображает и обновляет сумму и общую стоимость корзины покупок в WooCommerce с помощью AJAX. Проблема, о которой я не задумывался, заключалась в том, что я использую PolyLang на сайте и поэтому хотел бы, чтобы ключевые слова «product» и «products» переводились, когда пользователь меняет язык на странице.

Я пытался использовать pll_current_language() подключить в условном режиме перед вызовом AJAX functions.php то определяет переменные $item а также $items в зависимости от текущего языка и вставляет эти ключевые слова в строку, которую возвращает 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() hook всегда возвращает «sv», даже если я захожу на английскую страницу. Кажется, я не могу использовать этот хук в functions.php, или я что-то упустил? Есть ли у вас какие-либо предложения о том, как сделать эту работу?

0

Решение

Я искал то же решение. Затем,
Я только что понял, что $ lang = pll_current_language (); неправильно подбирает куки. Так как обходной путь. Я начал использовать $ _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);
}

Я не очень углубляюсь в кодирование плагинов. Но это может решить вашу проблему.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]