Нет «основного запроса» на странице магазина WooCommerce

#wordpress #woocommerce

Вопрос:

Я пытаюсь добавить фильтры как на страницу магазина, так и на страницы категорий товаров в WooCommerce, чтобы пользователи могли фильтровать список товаров по тегу product_tag.

Сначала я подключаюсь woocommerce_before_shop_loop , чтобы вывести список тегов перед списком продуктов

 public function render_category_tag_id_filters(): void {
    // Get a list of all product IDs
    if ( is_shop() ) {
        $product_ids = wc_get_products(
            [
                'limit'  => PHP_INT_MAX,
                'return' => 'ids',
            ]
        );

    // Get a list of product IDs in this category
    } else if ( is_product_category() ) {
        $product_cat = get_query_var( 'product_cat' );
        $product_ids = wc_get_products(
            [
                'category' => $product_cat,
                'limit' => PHP_INT_MAX,
                'return'   => 'ids',
            ]
        );

    // Don't continue
    } else {
        return;
    }

    // Render template part here etc. etc.
}
add_action( 'woocommerce_before_shop_loop', [ $this, 'render_category_tag_id_filters' ] );
 

Щелчок по фильтрам создает разделенный запятыми список идентификаторов product_tag в var запроса, который выглядит следующим образом…

 /product-category/candles/?tag_ids=31,32,35
 

Затем я подключаюсь woocommerce_product_query_tax_query , чтобы отфильтровать основной список продуктов, используя значения из var запроса

 public function apply_category_tag_id_filters( array $tax_query, WC_Query $wc_query ): array {
    // Abort if not the main query
    if(
        ! ( $wc_query->get_main_query() instanceof WP_Query )
        || ! $wc_query->get_main_query()->is_main_query()
    ) {
        return $tax_query;
    }

    // Get the filter tag IDs
    $filter_tag_ids = $this->get_category_filter_tag_ids();
    if (
        ! is_array( $filter_tag_ids )
        || 0 === count( $filter_tag_ids )
    ) {
        return $tax_query;
    }

    //
    $tax_query[] = array(
        'taxonomy' => 'product_tag',
        'field'    => 'term_id',
        'terms'    =>  $filter_tag_ids,
        'operator' => 'AND',
    );

    //
    return $tax_query;
}
 

Вот тут-то я и расклеиваюсь. Он отлично работает на страницах категорий товаров. Проблема в том, что ни один из запросов на главной странице магазина, похоже, не помечен как основной запрос. Это означает, что моя функция фильтрации завершается рано. Если я удалю проверку для основного запроса, это сработает, но мой список фильтров тегов в верхней части страницы также фильтруется по идентификатору активного тега

Это ошибка? Правильно ли я ориентируюсь на основной запрос?