web-dev-qa-db-ja.com

カスタム分類テンプレートエラー:キャッチ可能な致命的エラー:クラスWP_Errorのオブジェクトを文字列に変換できませんでした

この ページ でエラーを追跡しようとしています。

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

カスタムの投稿タイプと分類法があります。

分類法:team_categories

  • 用語:「委員会」(とりわけ)

    • 委員会の下の子供の言葉:継続教育、倫理、立法行動など(*この部分はうまくいっているようです)

      • 各委員会のチームメンバー(働いていない)

たとえば、「委員会」分類テンプレートページに子の用語をリストし、各委員会のメンバーを表示します。

継続教育委員会

  • ジェーン・ドウ
  • ジョンブラウン
  • 等.

倫理委員会

  • ジャックジョーンズ
  • アンアクメ
  • 等.

これが現在のコードです:

$taxonomyName = "team_categories";
//This gets top layer terms only.  This is done by setting parent to 0.  
$parent_terms = get_terms(
    $taxonomyName, 
    array( 'parent' => 0, 'orderby' => 'slug', 'hide_empty' => false )
);   
echo '<ul>';
foreach ( $parent_terms as $pterm ) {
    //Get the Child terms
    $terms = get_terms(
        $taxonomyName, 
        array( 'parent' => $pterm->term_id, 'orderby' => 'slug', 'hide_empty' => false )
    );
    foreach ( $terms as $term ) {
        echo '<li><a href="' . get_term_link( $term->name, $taxonomyName ) . '">' . 
            $term->name . '</a></li>';  
    }
}
echo '</ul>';

エラーはここにあるようです:

        echo '<li><a href="' . get_term_link( $term->name, $taxonomyName ) . '">' . 
            $term->name . '</a></li>'; 

更新:

次のコードは、私が探しているものに近づきます。

$term_id = 26; // id of committees
$taxonomy_name = 'team_categories';
$termchildren = get_term_children( $term_id, $taxonomy_name );                      
echo '<ul>';
foreach ( $termchildren as $child ) {
    $term = get_term_by( 'id', $child, $taxonomy_name );
    echo '<li><a href="' . get_term_link( $child, $taxonomy_name ) . '">' . 
        $term->name . '</a></li>';
}
echo '</ul>';

「委員会」カテゴリのすべてのサブカテゴリが一覧表示されます。

各カテゴリの見出しの下に各カテゴリの投稿を表示するにはどうすればよいですか。カスタム投稿タイプの名前は "team"です。

1
Trish Thompson

まあ、あなたはオブジェクトechoです。あなたがnotであるなら、ただ物事をエコーすることは絶対にしないでください。関数を見てください。エラー自体は非常に明らかです。

function get_term_link( $term, $taxonomy = '') {
    global $wp_rewrite;

    if ( !is_object($term) ) {
        if ( is_int($term) ) {
            $term = get_term($term, $taxonomy);
        } else {
            $term = get_term_by('slug', $term, $taxonomy);
        }
    }

    if ( !is_object($term) )
        $term = new WP_Error('invalid_term', __('Empty Term'));

あなたは見返りにオブジェクトを取得していないようですので、おそらくあなたの$term->nameは間違っている(または空です)。

エラーをテストするにはis_wp_error()を使い、メッセージを出力します。

$link = get_term_link( etc );
if ( is_wp_error( $link ) )
    echo $link->get_error_message();

それからあなたは何が起こったのかについての正しい出力を得て、それを修正することができるはずです。

1
kaiser

編集:私はendforeach;を追加することを提案しました、しかし、私はcodexのコード例を見ただけで、彼らはそれを使いません、それでそれは必要ではありません。

もう1つの提案は、入れ子になったforeach()を使用せずに get_term_link() の例に従うことで、目的の "最上位層の用語"の結果が得られるかどうかを確認することです。

彼らのコード例の1つの利点は、エラーが続くまで続くようです。

$terms = get_terms( 'team_categories' );

echo '<ul>';

foreach ( $terms as $term ) {

    // Sanitize the term, since we will be displaying it.
    $term = sanitize_term( $term, 'team_categories' );

    $term_link = get_term_link( $term, 'team_categories' );

    // If there was an error, continue to the next term.
    if ( is_wp_error( $term_link ) ) {
        continue;
    }

    // We successfully got a link. Print it out.
    echo '<li><a href="' . esc_url( $term_link ) . '">' . $term->name . '</a></li>';
}

echo '</ul>';

それでもうまくいくのであれば、コード・フォーマットのサンプル・スタイルを使用してさらに複雑さを増してください。

0
Stephen S.

私にとって効果的だったのは、配列内のオブジェクトの一部を参照するための構文を修正したことです。

私の場合の正しいコードはecho $web_desc_title[$i]->name;でした

0
Jeremy Woods