Несколько аргументов orderby в запросе продукта на странице архива WooCommerce

Я хочу заказать товары на страницах архива по состоянию на складе (нет в наличии в конце списка) и цене (сначала самая низкая). На данный момент порядок меню установлен по умолчанию, и используется этот код:

add_action( 'woocommerce_product_query', 'sort_by_stock_status', 999 );

function sort_by_stock_status( $query ) {
if ( is_admin() ) return;
$query->set( 'meta_key', '_stock_status' );
$query->set( 'orderby', array( 'meta_value' => 'ASC' ) );
}

И это дает мне возможность показывать товары, заказанные по состоянию на складе.

Я пытался отредактировать код, чтобы он был заказан по запасам И цене ... не повезло Вот что я пробовал:

 add_action( 'woocommerce_product_query', 'sort_by_stock_status_and_menu_order', 999 );

function sort_by_stock_status_and_menu_order( $query ) {
if ( is_admin() ) return;
$query->set( 'meta_key', '_stock_status' );
$query->set( 'orderby', array( 'meta_value' => 'ASC', 'menu_order' => 'ASC' ) );
}

Если я настроил меню на «заказ по цене», я увижу, что продукты упорядочены только по цене на складе и на складе вместе ... Может ли кто-нибудь помочь мне с этим? Может быть, это уже реализовано на некоторых ваших сайтах ...))


person kh1    schedule 29.04.2020    source источник
comment
Некоторые отзывы будут оценены ниже за ответ, пожалуйста ...   -  person LoicTheAztec    schedule 05.05.2020


Ответы (1)


ВЫ были очень близко ... Вам нужно внести некоторые изменения в свой код, чтобы получить несколько аргументов "порядок по", используя только одну строку вместо массива (каждый аргумент разделяется пробелом в этой уникальной строке):

add_action( 'woocommerce_product_query', 'sort_by_stock_status_and_menu_order', 999 );
function sort_by_stock_status_and_menu_order( $query ) {
    if ( is_admin() ) return;

    $query->set( 'meta_key', '_stock_status' );
    $query->set( 'orderby', 'meta_value menu_order' );
    // $query->set( 'order', 'ASC' ); // <== 'order' argument is already "ASC" by default
}

Аргументом запроса "порядок" по умолчанию уже является ASC, поэтому менять его не нужно.

Код находится в файле functions.php вашей активной дочерней темы (или активной темы). Проверено и работает.

person LoicTheAztec    schedule 29.04.2020
comment
Что насчет order, если я хочу, чтобы _stock_status был DESC и menu_order ASC? - person Hamid Araghi; 18.06.2021