Фильтрация запроса Woo Commerce перед загрузкой страницы для сортировки по цене - PullRequest
0 голосов
/ 18 декабря 2018

У меня есть категория товаров в моем магазине Woo Commerce под названием «j-pods».

Цель состоит в том, чтобы сделать страницу, сосредоточенную вокруг «дешевых j pods».

Итак, я создалновая категория продуктов с слагом 'cheap-j-pods'.

Когда загружается "дешевый" вариант страницы, я хотел бы изменить запрос, чтобы он вытягивал все товары из оригинальных j-pods'и отфильтруйте их от самой низкой до самой высокой цены.

Насколько я понимаю, действие' woocommerce_product_query 'было способом переделать основной запрос перед его выполнением.

Обновление: Я нашел хороший способ изменить категорию продукта, которую нужно вытащить, однако часть запроса по цене не работает.

Вот мой код ...

<code>add_action( 'woocommerce_product_query', function( $q ) {
   $pageCat = $q->get( 'product_cat' );

   if( empty($pageCat) || $pageCat !== 'cheap-j-pods') { 
       return;
   }

   // Change product category query
   $q->set( 'product_cat', 'j-pods' );

   // Extract existing meta query
   $meta_query = $q->get( 'meta_query' );

   // Add a query to arrange products by asc price
   $meta_query[] = array(   
       'orderby' => 'meta_value_num',
       'meta_key' => '_price',
       'order' => 'asc'
   ); 

   //echo '<pre style="display:block">' . print_r($meta_query, true) . '
';$ q-> set ('meta_query', $ meta_query);} 900);

Теперь продукты будут отображаться, но в порядке по умолчанию.

Почему сортировка продуктов по цене не работает в запросе?

Большое спасибо.

1 Ответ

0 голосов
/ 19 декабря 2018

Я нашел очень аккуратный способ сделать эту работу.

Моя ошибка заключалась в применении восходящих ценовых параметров к массиву 'meta query', тогда как значения ожидаются в корневой части массива.

Рабочий код ниже.

add_action( 'woocommerce_product_query', function( $q ) {
    $pageCat = $q->get( 'product_cat' );

    // Only fire on specific category page
    if( empty($pageCat) || $pageCat !== 'cheap-j-pods') { 
        return;
    }

    // Change product category query
    $q->set( 'product_cat', 'j-pods' );

    // Change products to be ordered by price (lowest - highest)
    $q->set( 'orderby', 'meta_value_num');
    $q->set( 'meta_key', '_price');
    $q->set( 'order', 'asc');


}, 900);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...