web-dev-qa-db-ja.com

直接の子供のための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>';  }
?>

これによりエラーが発生します。

キャッチ可能な致命的エラー:クラスWP_Errorのオブジェクトを...の文字列に変換できませんでした /

私は何をしましたか?

ありがとうございます。

4
b0nd

代わりに 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はtermオブジェクトなので、get_term_link()は2番目のパラメータを必要としません。 get_terms() には2番目のパラメータのためのより多くのオプションがあります。あなたは見てみるべきです。

7