Многочисленные аргументы orderby на странице продукта архивной страницы WooCommerce - PullRequest
2 голосов
/ 29 апреля 2020

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

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' ) );
}

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

1 Ответ

0 голосов
/ 29 апреля 2020

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

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
}

По умолчанию аргумент запроса "order" уже AS C, поэтому изменять его не нужно.

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

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