get_terms - только родительские элементы

14 авг. 2014 г., 14:31:02
Просмотры: 29.1K
Голосов: 21

Я пытаюсь получить только термины верхнего уровня:

$cat_args = array(
    'parent '       => 0,
    'number'        => 10,
    'hide_empty'    => false,           
);

$categories = get_terms( 'question_category' , $cat_args); 

Но этот запрос возвращает также все дочерние термины, я перепробовал всё, но он всё равно получает дочерние термины.

Я пытаюсь решить эту проблему уже 5 часов и не могу понять, что не так в моём коде. Это баг WordPress или есть ошибка в моём коде?

Спасибо за помощь.

2
Комментарии

Я думаю, вы имеете в виду только термины верхнего уровня из вашей таксономии question_category

Pieter Goosen Pieter Goosen
14 авг. 2014 г. 14:39:41

Да, я имею в виду именно это

Aryan Aryan
14 авг. 2014 г. 14:40:29
Все ответы на вопрос 1
6
31

Ваш код правильный, ну почти правильный. При первом взгляде, должен признаться, я тоже это упустил.

В вашем коде есть две синтаксические ошибки. Если присмотреться, '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 );
14 авг. 2014 г. 14:59:38
Комментарии

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

jave.web jave.web
15 июн. 2016 г. 12:02:24

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

Pieter Goosen Pieter Goosen
15 июн. 2016 г. 12:05:16

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

Mikepote Mikepote
16 апр. 2019 г. 17:20:23

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

jave.web jave.web
18 апр. 2019 г. 00:26:26

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

Sarah Lewis Sarah Lewis
3 мая 2019 г. 20:29:10

Признаю свою ошибку.

Mikepote Mikepote
4 мая 2019 г. 00:58:31
Показать остальные 1 комментариев