заводите срочных детей только для ближайших детей (не внуков)


Я хочу отобразить дочерние термины пользовательской таксономии. В настоящее время я могу сделать это с помощью 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 не удалось преобразовать в строку...

Что я сделал не так?

Спасибо!

Author: b0nd, 2013-11-25

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() имеет больше опций для второго параметра. Вам стоит взглянуть.

 9
Author: Charles Clarkson, 2013-11-25 16:55:22