get_terms - только родительские элементы
Я пытаюсь получить только термины верхнего уровня:
$cat_args = array(
'parent ' => 0,
'number' => 10,
'hide_empty' => false,
);
$categories = get_terms( 'question_category' , $cat_args);
Но этот запрос возвращает также все дочерние термины, я перепробовал всё, но он всё равно получает дочерние термины.
Я пытаюсь решить эту проблему уже 5 часов и не могу понять, что не так в моём коде. Это баг WordPress или есть ошибка в моём коде?
Спасибо за помощь.

Ваш код правильный, ну почти правильный. При первом взгляде, должен признаться, я тоже это упустил.
В вашем коде есть две синтаксические ошибки. Если присмотреться, 'parent '
и 'parent'
- это не одно и то же. Не следует оставлять пробелы между одинарными кавычками ('
) и аргументами.
Также вам не нужно добавлять запятую ,
после последнего аргумента.
Вот рабочий вариант:
$cat_args = array(
'parent' => 0,
'number' => 10,
'hide_empty' => false
);
ОБНОВЛЕНИЕ 15-06-2016
Начиная с WordPress 4.5, синтаксис для get_terms()
изменился. Параметр taxonomy
теперь включается в массив аргументов, поэтому новый вариант использования выглядит так:
$args = [
'taxonomy' => 'my_tax',
'parent' => 0,
'number' => 10,
'hide_empty' => false
];
$terms = get_terms( $args );

Просто заметка: вам не обязательно добавлять ,
после последнего элемента массива, ОДНАКО это хорошая практика ;)

@jave.web Спасибо, я знаю об этом, просто не всегда так делаю. ;-)

@jave.web На самом деле это не хорошая практика - добавлять ,
после последнего элемента массива, так как это может сломать другие языки, которые не так терпимы к лишним запятым. Например, JSON сломается, если вы так сделаете.

@Mikepote на самом деле это не так, это хорошая практика. Если вы переносите код с одного языка на другой, следует использовать правильное преобразование. Это все равно что сказать, что нельзя использовать создание объектов и/или переменные в качестве аргументов, потому что при копировании/вставке ломается JSON... Это хорошая практика даже в JavaScript, поэтому позже поддержка была добавлена везде. Копирование/вставка внутри одного языка и проекта гораздо более вероятна, и добавление завершающей запятой, где это возможно, предотвращает распространенные проблемы, замедляющие работу — это не только мой опыт, но и опыт других разработчиков.

@Mikepote Добавлю к сказанному jave.web: это не просто хорошая практика, но и прямо рекомендуется в стандартах кодирования PHP для WordPress, которым в идеале должен соответствовать весь WordPress-специфичный код: https://make.wordpress.org/core/handbook/best-practices/coding-standards/php/#indentation
