Добавляю свой плагин для изменения сортировки. На страницах каталога появляется новый пункт в выборе сортировки - "Иновационная". При выборе - устанавливается гет-параметр и сортировка работает как надо. Вешаю добавление сортировки на хук 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' );