get_terms игнорирует аргумент orderby для категорий продуктов WooCommerce - PullRequest
1 голос
/ 23 апреля 2019

Я использовал следующую функцию для вывода списка товаров и упорядочения их по имени. Поскольку я последний раз обновлял WooCommerce с 3.5.7 до 3.6.1, и это больше не работает.

Неважно, что я пишу в orderby. Термины упорядочены по id, я думаю, в том же порядке, что и в бэкэнде.

У меня раньше была эта проблема, но потом я добавил 'menu_order' => false, и она сработала. Но с момента обновления ничего не работает.

$terms = get_terms( 'product_cat', array(
       'orderby'           => 'name', 
       'order'             => 'ASC',
       'parent' => 2063,
       'menu_order' => false,
       'suppress_filter' => false
   ) );

Я тоже безуспешно пытался переключать темы. Любая помощь приветствуется.

Я использую WordPress версии 5.1.1 и тему Storefront версии 2.4.5.

1 Ответ

1 голос
/ 23 апреля 2019

Обновление 2 - решено

После того, как я сообщил об этой проблеме на Github WooCommerce , это была явная ошибка, затрагивающая аргумент orderby при вызове get_terms() функция.Теперь одобрено и исправлено .

Проблема решена в обновлении Woocommerce 3.6.2


Во-первых, таксономии WordPress 4.5 должны передаваться через аргумент 'taxonomy' в массиве аргументов функции get_terms().

Нельзя использовать 'menu_order' и 'suppress_filter' аргументы, поскольку они не определены для WP_Term_Query Class.Вместо 'menu_order' вы будете использовать 'orderby' => 'order',.


Теперь разрешенные аргументы для WordPress get_terms() перечислены в WP_Term_Query __construct().

Так что ДА, вы можете использовать ** "orderby" аргумент: **

  • значение по умолчанию установлено на name.
  • Принимает поля терминов (name, slug, term_group, term_id, id, description, parent), count для счетчика таксономии терминов, include для соответствия order параметра $ include, slug__in для совпадения с order параметра $ slug, meta_value,meta_value_num, значение $ meta_key, ключи массива $ meta_query или none для пропуска предложения ORDER BY.

Таким образом, ваш код должен выглядеть примерно так:

$terms = get_terms( 'product_cat', array(
    'taxonomy' => 'product_cat',
    // 'orderby'  => 'name', // <=== Default orderby is already 'name'
    'order'    => 'ASC',
    'parent'   => 2063,
) );

Протестировано и

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