Palych_tw
@Palych_tw
Типа веб-разработчик

Как программно вызвать пересчет товаров в категориях?

Всем привет. У WPML есть один баг, о котором им хорошо известно много лет, но они ничего с этим, судя по всему, не сделали. Проблема в том, что на второстепенных языках происходит сбой с подсчетом количества товаров внутри категорий и в итоге слетает вся иерархи я в виджете категорий. Вот 2 скриншота:
5ebbb0b49b82e376689151.png
5ebbb0aaef536566238237.png
Сами 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 не работает внутри хука?
  • Вопрос задан
  • 94 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы