get_term_children только для прямых потомков (без вложенных дочерних элементов)
Я хочу отобразить дочерние элементы термина пользовательской таксономии. Сейчас я могу сделать это с помощью get_term_children, но при этом отображаются как дочерние, так и вложенные элементы, а я хочу избежать этого и показывать только прямых потомков.
Вот что у меня есть сейчас (но это выводит и дочерние, и вложенные элементы):
<?php
$term_id = get_queried_object_id();
$taxonomy_name = 'mytaxname';
$termchildren = get_term_children( $term_id, $taxonomy_name );
foreach ( $termchildren as $child ) {
$term = get_term_by( 'id', $child, $taxonomy_name );
echo ' <div class="product-archive">';
echo '<div class="post-title">
<h3 class="product-name"><a href="' .get_term_link( $term, $taxonomy_name ). '">' .$term->name. '</a></h3>
</div>
</div>'; }
?>
Вот что я пытаюсь заставить работать, чтобы показывать только прямых потомков:
<?php
$term_id = get_queried_object_id();
$taxonomy_name = 'mytaxname';
$args = array('parent' => $term_id,'parent' => $term_id );
$termchildren = get_terms( $taxonomy_name, $args);
foreach ( $termchildren as $child ) {
$term = get_term_by( 'id', $child, $taxonomy_name );
echo ' <div class="product-archive">';
echo '<div class="post-title">
<h3 class="product-name"><a href="' .get_term_link( $term, $taxonomy_name ). '">' .$term->name. '</a></h3>
</div>
</div>'; }
?>
Это выдает ошибку:
Catchable fatal error: Object of class WP_Error could not be converted to string in...
Что я сделал неправильно?
Спасибо!
Используйте функцию get_terms()
вместо этого:
$term_children = get_terms(
'mytaxname',
array(
'parent' => get_queried_object_id(),
)
);
if ( ! is_wp_error( $terms ) ) {
foreach ( $term_children as $child ) {
echo '
<div class="product-archive">
<div class="post-title">
<h3 class="product-name"><a href="' . get_term_link( $child ) . '">' . $child->name . '</a></h3>
</div>
</div>
';
}
}
Функция get_terms()
может возвращать объект WP_Error, поэтому необходимо проверять, что ошибки нет. Она возвращает массив объектов терминов, поэтому вам больше не нужно получать объекты с помощью get_term_by()
. Поскольку $child
является объектом термина, get_term_link()
не требует второго параметра. У get_terms()
больше опций для второго параметра. Вам стоит ознакомиться с ними.
