Всем привет. У WPML есть один баг, о котором им хорошо известно много лет, но они ничего с этим, судя по всему, не сделали. Проблема в том, что на второстепенных языках происходит сбой с подсчетом количества товаров внутри категорий и в итоге слетает вся иерархи я в виджете категорий. Вот 2 скриншота:
Сами WPML
предлагают просто запустить пересчет терминов из админки. Однако, это все слетает при каждом создании/обновлении товара.
Я написал функцию и повесил её на хуки обновления/создания нового товара
add_action('woocommerce_update_product', 'recount_wc_terms_wpml', 99);
add_action('woocommerce_new_product', 'recount_wc_terms_wpml', 99);
function recount_wc_terms_wpml() {
global $sitepress;
$active_languages = $sitepress->get_active_languages();
$current_language = $sitepress->get_current_language();
foreach ( $active_languages as $lang ) {
$sitepress->switch_lang( $lang['code'] );
$product_cats = get_terms(
'product_cat',
[
'hide_empty' => false,
'fields' => 'id=>parent',
]
);
_wc_term_recount( $product_cats, get_taxonomy( 'product_cat' ), true, false );
$product_tags = get_terms(
'product_tag',
[
'hide_empty' => false,
'fields' => 'id=>parent',
]
);
_wc_term_recount( $product_tags, get_taxonomy( 'product_tag' ), true, false );
}
$sitepress->switch_lang( $current_language );
}
Хук срабатывает, даже get_term() выбирает нужные категории в соответствии с языком, но пересчет почему то не имеет действия. Если я просто вызову свою функцию recount_wc_terms_wpml , например, просто из header.php, то все работает отлично. Но почему _wc_term_recount не работает внутри хука?