В дефолтный селект сортировки нужно добавить два поля:
- сортировка по Sales - Отображение товаров, имеющих цену со скидкой
- сортировка New - отображение товаров, имеющих ACF поле (поле checkbox) new со значением true
Нужные пункты в select добавил без проблем, для сортировки использую код:
add_filter('woocommerce_get_catalog_ordering_args', 'wcs_get_catalog_ordering_args');
function wcs_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 ('sales' === $orderby_value) {
$args['orderby'] = 'meta_value_num';
$args['order'] = 'DESC';
$args['meta_key'] = '_sale_price';
$args['meta_query'] = array(
array(
'key' => '_sale_price',
'value' => 0,
'compare' => '>',
'type' => 'NUMERIC',
)
);
}
if ('new' === $orderby_value) {
$args['orderby'] = 'meta_value';
$args['order'] = 'DESC';
$args['meta_key'] = 'new';
$args['meta_query'] = array(
array(
'key' => 'new',
'value' => 1,
'compare' => '=',
)
);
}
return $args;
}
При сортировке New товары сортируются, сразу выводятся поля с New, после остальные. А нужно исключить остальные товары вообще.
Сортировка по sales вообще не работает.
Как правильно добавить свою сортировку?