Показать все термины пользовательской таксономии?
Я создал несколько пользовательских таксономий, и мне нужно показать ВСЕ термины из них. На данный момент я могу показать только таксономии, которые выбраны в произвольном типе записи, но мне нужно показать все термины, независимо от того, выбраны они или нет. Это нужно для того, чтобы позже создать фильтр, который будет фильтровать в зависимости от того, какие термины содержит значение произвольного типа записи.
<?php
// Аргументы для получения таксономий
$args=array(
'public' => true,
'_builtin' => false
);
$output = 'names'; // или objects
$operator = 'and';
$taxonomies=get_taxonomies($args,$output,$operator);
if ($taxonomies) {
foreach ($taxonomies as $taxonomy ) {
$terms = get_terms($taxonomy);
foreach ( $terms as $term) {
?>
<li><br><a href="#"><input type="checkbox" name="profile[]" value=""><?php echo $term->name; ?> <br/></a></li>
<?php
}
}
}
?>
Вот что у меня есть на данный момент.
Заранее спасибо!

Вам нужно передать дополнительный аргумент в функцию get_terms()
. По умолчанию скрываются "пустые" термины - термины, которые не присвоены ни одной записи.
$terms = get_terms([
'taxonomy' => $taxonomy,
'hide_empty' => false,
]);
РЕДАКТИРОВАТЬ:
Если вы хотите отобразить название или ярлык пользовательских таксономий, хранящихся в переменной $terms, вы можете использовать следующий фрагмент кода:
foreach ($terms as $term){
echo $term->slug." : ";
echo $term->name;
echo "<br><br>";
}
Где $term->slug
выводит ярлык элемента таксономии из списка, а $term->name
выводит название соответствующего элемента таксономии.

Большое спасибо! Но я хочу спросить кое-что: почему вы создаете массив внутри переменной вместо того, чтобы объявить его выше, где показан первый массив?

Для простоты. Если бы массив аргументов был более сложным, я бы объявил его сначала (скорее всего), но для единственного аргумента это просто самый прямой способ. Это должно работать одинаково хорошо в любом случае.

Этот код получает все категории и подкатегории пользовательских таксономий с помощью get_terms()
:
<?php
// Получаем все родительские категории продуктов, включая пустые
$wcatTerms = get_terms('product_cat', array('hide_empty' => 0, 'parent' =>0));
foreach($wcatTerms as $wcatTerm) :
?>
<ul>
<li>
<a href="<?php echo get_term_link( $wcatTerm->slug, $wcatTerm->taxonomy ); ?>"><?php echo $wcatTerm->name; ?></a>
<ul class="megaSubCat">
<?php
// Параметры для получения подкатегорий
$wsubargs = array(
'hierarchical' => 1,
'show_option_none' => '',
'hide_empty' => 0,
'parent' => $wcatTerm->term_id,
'taxonomy' => 'product_cat'
);
// Получаем все подкатегории для текущей родительской категории
$wsubcats = get_categories($wsubargs);
foreach ($wsubcats as $wsc):
?>
<li><a href="<?php echo get_term_link( $wsc->slug, $wsc->taxonomy );?>"><?php echo $wsc->name;?></a></li>
<?php
endforeach;
?>
</ul>
</li>
</ul>
<?php
endforeach;
?>

<div class="col-sm-4">
<?php
// Получаем список категорий
$categories = get_terms( array(
'taxonomy' => 'freelancer_type', // Таксономия фрилансера
'hide_empty' => false, // Показывать пустые категории
'parent' => 0, // Только родительские категории
) );
?>
<select class="form-control" name="parent_category" id="parent_category">
<option value="">Выберите категорию</option>
<?php
// Перебираем все категории
foreach($categories as $category) {
?>
<option value="<?php echo $category->term_id; ?>"><?php echo $category->name; ?></option>
<?php
}
?>
</select>
<select class="form-control" name="child_category" id="child_category">
<option value="">Выберите подкатегорию</option>
</select>
</div>

Ваш ответ можно улучшить, добавив дополнительную подтверждающую информацию. Пожалуйста, [edit] чтобы добавить больше деталей, таких как цитаты или документация, чтобы другие могли подтвердить правильность вашего ответа. Вы можете найти больше информации о том, как писать хорошие ответы в центре помощи.
