Параметр get_terms 'number' не работает

Почему вызов get_terms () не возвращает 10 максимальных результатов по запросу? Я озадачен.

$args = array( 'taxonomy' => 'video_tag', 'parent' => 0, 'number' => 10 ); error_log("JPH get_terms args: " . print_r($args,true)); $children = get_terms( $args ); error_log("JPH taxonomy: " . count( $children) . " total"); 

Результатом вывода в журнале является

JPH get_terms args: Array \ n (\ n [parent] => 0 \ n [число] => 10 \ n [таксономия] => video_tag \ n) \ n таксономия JPH: 24806 всего

Я использую PHP 7.1 и WordPress 4.8.2

Обратите внимание на это условие в предельной части WP_Term_Query [src] :

 // Don't limit the query results when we have to descend the family tree. if ( $number && ! $hierarchical && ! $child_of && '' === $parent ) { if ( $offset ) { $limits = 'LIMIT ' . $offset . ',' . $number; } else { $limits = 'LIMIT ' . $number; } } else { $limits = ''; } 

где по умолчанию child_of равен 0, parent – пустая строка, а иерархическаяtrue .

Давайте проверим два случая:

A) Чтобы ограничить результаты термина до уровня верхнего уровня иерархической таксономии, мы можем использовать:

 $args = [ 'taxonomy' => 'category', 'parent' => 0, 'number' => 10, ]; 

В этом случае WP_Term_Query извлекает все термины верхнего уровня, а затем использует срез массива [ src ] для ограничения результатов в соответствии с WP_Term_Query числом . Для разбивки на страницы мы также можем добавить смещение .

B) В случае неиерархической таксономии мы можем использовать:

 $args = [ 'taxonomy' => 'post_tag', 'number' => 10, ]; 

где нам не нужно явно указывать родительский элемент равным 0. Каждый член является верхним. Здесь результаты результатов ограничены LIMIT в SQL-запросе.

Итак, вот некоторая информация для других людей с этой проблемой.

get_terms не будет использовать параметр number при определенных условиях, например, если вы передадите parent параметр или если hierarchical параметр равен true . В этих случаях я пробовал два обходных пути, ни очень хорошо.

  1. Вы можете вызвать get_terms после чего после этого выполните array_slice . Однако, если у вас есть тонна таксономий, тогда WordPress может не работать во время вызова get_terms , что было моей первоначальной проблемой.

  2. Вы можете подключиться к terms_clauses и заставить вызов get_terms использовать LIMIT в своем вызове sql. Однако это относится ко всем вызовам get_terms через WordPress, а не только к одному в моем пользовательском коде, и я не хочу вызывать непреднамеренные последствия.