web-dev-qa-db-ja.com

get_post_termsが期待どおりに機能しない

"Fruit"というカスタム投稿タイプがあり、その下に "Fruit Categories"という階層分類があります。

私がFruitの下に新しい投稿を作成するとき、私はそれを "term"に割り当てることができます - あなたが通常の投稿カテゴリーと同じように、しかしFruit Categories分類学の下で。

Fruitに3つの投稿を追加しました。それぞれに1つの用語を割り当てました。 「りんご」「ナシ」「バナナ」。

これらはすべてうまくいきますが、今度はそのカスタム投稿タイプのために、ULの用語を単にリストするアーカイブページを作成したいと思います。

mysite.com/fruit

  • りんご
  • 洋ナシ
  • バナナ

私が直面しているこの問題は、私が使ったすべてのクエリが最初の用語であるリンゴを返すように思われるということです。他の2つは表示されていません。私は多くのコードスニペットを試してみました。

私が試したことがいくつかあります。

    $term_list = wp_get_post_terms($post->ID, 'fruit_categories', array("fields" => "all"));  print_r($term_list);

そして

$terms = wp_get_post_terms($post->ID,'fruit_categories');
$count = count($terms);

if ( $count > 0 ){
    echo "<ul>";
    foreach ( $terms as $term ) {
        echo '<li><a href="'.get_term_link($term->slug, 'fruit_categories').'">'. $term->name . "</a></li>";
    }
    echo "</ul>";
}

私はここで提案されたヒントも試しました、しかし、これはまだリストされている最初の用語だけで同じ問題をもたらします。

https://stackoverflow.com/questions/15502811/display-current-post-custom-taxonomy-in-wordpress

プラグインなしのフレッシュインストールです。

追加の用語を取り込むためにforeachループを追加する必要がありますか?それとも私がここに足りないものがありますか?

私もwp_get_object_termsを見てきましたが、使い方がよくわかりません。

スクリーンダンプをすると、mysite/fruitについて次のようになります。

りんご

Array([0] => stdClassオブジェクト([term_id] => 43 [名前] =>りんご[slug] =>りんご[term_group] => 0 [term_taxonomy_id] => 43 [分類])> fruit_categories [説明] = > [parent] => 0 [count] => 2))

それが価値があるものについては、ここに私のカスタム投稿の種類と分類レジストリコード http://Pastebin.com/K8kwuzqt

任意の助けは大歓迎です。

1
Sol

私はあなたが以前にやろうとしていたことを誤解しました。私はあなたが1つの特定の投稿に関連する用語をリストしたいと思いました - あなたが今いるもの。おっと!

代わりにこれを試してください:

    $terms = get_terms('fruit_category');
    if(!empty($terms)){ 
        echo "<ul>";
        foreach ( $terms as $term ) {
            echo '<li><a href="'.get_term_link($term->slug, 'fruit_categories').'">'. $term->name . "</a></li>";
        }
        echo "</ul>";
    }

各用語に少なくとも1つの記事が含まれていれば、これによってtermページへのすべてのリンクのリストが得られます。

更新:

分類用語をもう少し動的に取得するには、次のようにします。

// taxonomy term archives
$post_type = get_post_type();
$taxonomies = get_object_taxonomies($post_type);
if(!empty($taxonomies)){
    foreach($taxonomies as $taxonomy){
        $terms = get_terms($taxonomy);
        if(!empty($terms)){ 
            echo "<ul>";
            foreach ( $terms as $term ) {
                echo '<li><a href="'.get_term_link($term->slug, $taxonomy).'">'. $term->name . "</a></li>";
            }
            echo "</ul>";
        }
    }
}
2
GhostToast