カスタム投稿タイプとカスタム分類法を使用しています。また、投稿ページに分類法の用語を表示するには、以下を使用しています。
the_terms( $post->ID, 'taxname', 'beforetext', ', ');
この投稿に割り当てられているすべての分類法をループ処理して、分類法ごとにfunctions.phpの別々の行ではなく順不同のリストで用語を表示する方法はありますか?これはforeachループを使って実行できると思いますが、正しい構文はわかりません。
この答えはtnorthcuttとの共同作業だったので、私はそれをコミュニティWikiにしました。
利用可能な興味深い関数がいくつかあります。the_taxonomies()
はget_the_taxonomies()
を呼び出し、次にget_object_taxonomies()
とwp_get_object_terms()
を呼び出します。
the_taxonomies()
は文書化されたテンプレートタグで、文書化されていないget_the_taxonomies()
への呼び出しを囲むライトラッパーです。
get_object_taxonomies()
は、関連する分類法のリストを(単純な名前またはオブジェクトとして)返します。これは、特定の状況では非常に便利です。それは文書化されていますが、Codexでは何もリンクされていないので、この関数を見逃しやすいです。私はwp-includes/taxonomy.php
を熟読することによってそれを見つけました。これに関するドキュメント化されていないラッパー関数get_post_taxonomies()
があります。デフォルトは現在の投稿です。
wp_get_object_terms()
は、重い作業のほとんどを行います。オブジェクトIDの配列(!)と分類名の配列(!)の2つ非常に興味深いパラメータがあります。それは結局、悪くないように見えるSELECTを生成し、与えられた分類法の中で与えられたオブジェクトのための(名前、オブジェクト、あるいは...ドキュメントを読むように)用語の配列を返します。
the_taxonomies()
を介して利用可能であるより複雑なフォーマットを必要とするならば、これらの「内部」関数について知っていることは有用であることを証明するべきです。
Ithink探しているのはget_the_term_listです。これに打撃を与える
get_the_term_list( $post->ID, 'taxname', '', ', ', '');
さもなければ、この機能はそれらを引っ張るかもしれません。マークアップの観点からどうやってそれらが吐き出されるのかわからない
get_terms( $taxonomy, array( 'hide_empty' => false ) );
これはカスタムの分類法で非常にうまく機能しています(分類法の名前を指定する必要はありません)。
このコードを配置する場所に応じて、global $post;
が必要かどうかがわかります。
global $post;
// get the post type
$post_type = get_post_type( get_the_ID() );
// go to taxonomies array
$post_type_taxonomies = get_object_taxonomies( $post_type );
// if we have any taxonomy
if ( ! empty( $post_type_taxonomies ) ) {
echo '<ul>';
// loop through each of them
foreach ( $post_type_taxonomies as $taxonomy ) {
// get terms list for each taxonomy
$terms = get_the_term_list( get_the_ID(), $taxonomy, '', '</li><li>', '' );
// show only those terms that are assigned to post
if ( $terms ) {
echo '<li>' . $terms . '</li>';
}
}
echo '</ul>';
}