заводите срочных детей только для ближайших детей (не внуков)
Я хочу отобразить дочерние термины пользовательской таксономии. В настоящее время я могу сделать это с помощью 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>'; }
?>
Это дает мне ошибка:
Обнаруживаемая фатальная ошибка: Объект класса WP_Error не удалось преобразовать в строку...
Что я сделал не так?
Спасибо!
1 answers
Используйте 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, поэтому вам нужно проверить, что это не так. Он возвращает массив объектов term, поэтому вам больше не нужно извлекать объекты с помощью get_term_by()
. Поскольку $child
является объектом термина, get_term_link()
не нуждается во втором параметре. get_terms()
имеет больше опций для второго параметра. Вам стоит взглянуть.