Индивидуальный заказ в woocommerce фильтрует товары - PullRequest
0 голосов
/ 31 марта 2020

У меня есть веб-сайт со 100 страницами продуктов, которые я хочу отсортировать по мета-значению, которое есть не у всех продуктов. Поэтому я сделал свой заказ, переопределив стандартный woocommerce со значением woocommerce_get_catalog_ordering_args ( link ) следующим образом:

function custom_order($args) {
   $args ['orderby'] = 'meta_value none';
   $args ['order'] = 'desc';
   $args ['meta_key'] = 'custom_something';
   return $args;
}
add_filter('woocommerce_get_catalog_ordering_args', 'custom_order');

Но так как большинство продуктов на самом деле не имеют этого значения, он не будет сортировать на что. Так что после добавления этого фильтра у меня осталось всего 2 страницы. Теперь я подумал о том, чтобы заказать его двумя способами. Итак, сначала по custom_something, а затем по некоторому значению, которое все продукты имеют, например, price или что-то в этом роде, но это не обязательно кажется лучшей идеей, и я также не мог понять, как это сделать.

Я просто хочу, чтобы товары, для которых указано это значение, были заказаны выше, а затем просто показывали все остальные товары. Не имеет значения, в каком порядке остальные продукты. Но результат теперь таков, что он показывает только те продукты, которые имеют ценность. Он фильтрует, а не заказывает в основном. Как я смогу выполнить это 1023? Я видел это: https://developer.wordpress.org/reference/classes/wp_query/#order -orderby-параметры , но я не могу понять, как применить это к моему заказу.

РЕДАКТИРОВАТЬ: I Я попробовал ответ от @johannes, и когда я var_dump($args); получил:

array(3) { 
["orderby"]=> string(15) "meta_value none"
["order"]=> string(4) "desc" 
["meta_key"]=> string(16) "custom_something"
}

, я не могу понять, почему это не сработает.

1 Ответ

0 голосов
/ 31 марта 2020

Вы можете использовать запасное поле для заказа, если ваше пользовательское поле отсутствует, как написано в документации :

function custom_order($args) {
   $args['orderby'] = 'meta_value none';
   $args['order'] = 'desc';
   $args['meta_key'] = 'custom_something';
   return $args;
}
add_filter('woocommerce_get_catalog_ordering_args', 'custom_order');

У меня еще не было возможности протестировать его, но это должно посоветовать WooCommerce сначала заказать по meta_value, а затем, если это значение не существует для продукта, заказать по none.

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