С помощью эта тема У меня есть функция, которая отображает и обновляет сумму и общую стоимость корзины покупок в 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, или я что-то упустил? Есть ли у вас какие-либо предложения о том, как сделать эту работу?
Я искал то же решение. Затем,
Я только что понял, что $ 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);
}
Я не очень углубляюсь в кодирование плагинов. Но это может решить вашу проблему.
Других решений пока нет …