Как изменить сортировку по умолчанию в Woocommerce?

Добавляю свой плагин для изменения сортировки. На страницах каталога появляется новый пункт в выборе сортировки - "Иновационная". При выборе - устанавливается гет-параметр и сортировка работает как надо. Вешаю добавление сортировки на хук woocommerce_product_query, потому что meta_query не передается в аргумента от хука woocommerce_get_catalog_ordering_args...

После того, как устанавливаю сортировку по умолчанию "Инновационная", сортировка не применяется... Но по умолчанию стоит выбранная новая сортировка.

Хук woocommerce_product_query срабатывает, условие проходит, дополнительные параметры запроса устанавливаются, но судя по всему - товары на тот момент уже получены... Есть ли хук для получения товаров, который срабатывает до хука custom_woocommerce_product_query?

Исходный код плагина
<?php
function custom_woocommerce_get_catalog_ordering_args($args) {
    $orderby_value = isset($_GET['orderby'])
        ? woocommerce_clean($_GET['orderby'])
        : apply_filters(
            'woocommerce_default_catalog_orderby',
            get_option('woocommerce_default_catalog_orderby')
        );
    if ('innovation' == $orderby_value) {
        $args = array(
            'orderby' => array(
                'by_availability' => 'ASC',
                'by_popularity' => 'DESC'
            ),
        );
    }
    return $args;
}

function custom_woocommerce_catalog_orderby($sortby) {
    $sortby['innovation'] = 'Инновационная';
    return $sortby;
}

function custom_woocommerce_product_query($query)
{
    $meta_query = $query->get('meta_query');

    if (get_option('woocommerce_default_catalog_orderby') == 'innovation') {
        $meta_query[] = array(
            'by_availability' => array(
                'key'     => '_stock_status',
            ));
        $meta_query[] = array(
            'by_popularity' => array(
                'key'     => 'total_sales',
                'type'    => 'NUMERIC',
            ));

        $query->set('meta_query', $meta_query);
    }
}

add_filter(
    'woocommerce_get_catalog_ordering_args',
    'custom_woocommerce_get_catalog_ordering_args',
    20
);

add_filter(
    'woocommerce_default_catalog_orderby_options',
    'custom_woocommerce_catalog_orderby',
    20
);

add_filter('woocommerce_catalog_orderby', 'custom_woocommerce_catalog_orderby', 20);

add_action('woocommerce_product_query', 'custom_woocommerce_product_query' );


  • Вопрос задан
  • 2050 просмотров
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы