Я создаю меню выбора возраста в администраторе, заполненный из таксономии age
. Таксономия имеет следующую иерархическую структуру:
- 18-25 (родитель, ID 183)
- 18 (ребенок)
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26-30 (родитель, ID 184)
- 26
- 27
- 28
- 29
- 30
Я хотел бы только список детей (18, 19 и т.д.) , а не родители (18-25, 26-30) и т.д. В настоящее время я использую get_terms
с parent
аргументом, но он не принимает более 1 родительский идентификатор. Вот что я пока показываю, где показывают детей от 18-25.
$ages = get_terms( 'age', array(
'hide_empty' => 0,
'parent' => '183',
));
Вот что я хочу, но не поддерживается. Я также попробовал это с массивом, но он тоже не работает.
$ages = get_terms( 'age', array(
'hide_empty' => 0,
'parent' => '183,184',
));
Я вижу, что есть функция get_term_children, но я не уверен, как ее использовать, так как похоже, что она принимает только одно значение. Например: в этом примере будет построен неупорядоченный список, но я могу изменить меню выбора.
<?php
$termID = 183;
$taxonomyName = "age";
$termchildren = get_term_children( $termID, $taxonomyName );
echo '<ul>';
foreach ($termchildren as $child) {
$term = get_term_by( 'id', $child, $taxonomyName );
echo '<li><a href="' . get_term_link( $term->name, $taxonomyName ) . '">' . $term->name . '</a></li>';
}
echo '</ul>';
?>
custom-taxonomy
terms
Эндрю
источник
источник
get_terms
дважды и объедините два массива результатов?get_terms
звонка). Ваш вопрос читается так, как будто вы хотите, чтобы у всех детей были два конкретных родительских термина.Ответы:
Это должно работать для вас:
источник
$term->name
недействителен вget_term_link()
, он принимает только термин ID, слизняк или объектВы также можете сделать:
Я заметил, что у родителя есть поле «родителя», равное 0, и у ребенка есть его родительский идентификатор в нем.
источник
wpse_exclude_top
параметра, добавленного к аргументам запроса ;-). Однако я согласен, что это быстрее, чем принятый ответwpse_exclude_top
иexclude_top
не нашел их. Google не знает об этом. Где это задокументировано?Мы можем исключить родителей верхнего уровня, отфильтровав их с помощью
terms_clauses
фильтра, чтобы изменить запрос SQL перед его выполнением. Таким образом, нам не нужно пропускать родителей в последнемforeach
цикле, поскольку они не находятся в возвращаемом массиве терминов, это избавляет нас от ненужной работы и кодированияВы можете попробовать следующее:
Чтобы исключить родителей верхнего уровня, теперь мы можем передать
'wpse_exclude_top' => 1
наш массив аргументов. Новыйwpse_exclude_top
параметр поддерживается фильтром вышеТолько примечание,
get_term_link()
не принимайте только термин, имя, слаг, ID или полный термин объекта. Для производительности всегда передавайте термин «объект»,get_term_link()
если термин «объект» доступен ( как в этом случае )источник
Почему вы не можете просто установить
childless
аргумент в true?источник
childless
аргумента в значение true означает, что вы можете углубиться только на 1 уровень, поэтому это не работает для таксономий с 3 и более уровнями.Если вы отображаете ребенка с несколькими родителями, вы можете попробовать это. Отобразить упомянутое имя
источник