get_terms игнорирует аргумент orderby для категорий продуктов WooCommerce

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

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

У меня была эта проблема раньше, но потом я добавил '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.


person nuriye    schedule 23.04.2019    source источник


Ответы (1)


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

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

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


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

Вы не можете использовать аргументы 'menu_order' и 'suppress_filter', так как они не определены для класса WP_Term_Query. Вместо '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,
) );

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

person LoicTheAztec    schedule 23.04.2019
comment
Спасибо! Но это не помогает, так как я использую WooCommerce и, как я уже писал, он не работает с более новой версией. Порядок таксономий по умолчанию в WooCommerce — это не имя, а menu_order. - person nuriye; 24.04.2019
comment
@nuriye Нет, извините, это порядок, а не menu_order… см. документацию по таксономии (которая отличается от данных публикации или метаданных публикации). Я просто помогаю, чем могу… но это баг WooCommerce. - person LoicTheAztec; 24.04.2019
comment
Вы правы, я посмотрел в базу данных. Должна быть ошибка woocommerce, что запрос принял и изменил порядок, когда я прошел menu_order... - person nuriye; 24.04.2019
comment
@nuriye Хорошие новости, ошибка была одобрена и исправлена ​​здесь… Это будет в следующем обновлении 3.6.2. - person LoicTheAztec; 25.04.2019
comment
@nuriye Выпущено обновление 3.6.2, и в журнале изменений вы увидите: Исправить — [3.6.x] Разрешить перезапись сортировки таксономий WC по умолчанию с помощью get_terms orderby. #23477 - person LoicTheAztec; 25.04.2019