web-dev-qa-db-ja.com

WP_Queryループ内で分類法を取得する

私は自分のカスタムWP_Queryを書き、投稿コンテンツを表示するためにループを使いました。現在の投稿のカテゴリを表示するためにget_the_category()を使用します、そしてそれはうまく働きます。現在、一部の投稿タイプでは、カテゴリではなくカスタム分類法があります。

カテゴリを取得するためのコード

$categories = get_the_category();
   if(!empty($categories)){
      foreach($categories as $index => $cat){
         echo $cat->name;
      }
   }

今、私はすべての分類法を引き出して、それらをコンマ区切りのフォーマットで印刷する必要があります。

私はこれを試しました:

$taxonomies = get_the_taxonomies();
if(!empty($taxonomies)){
   foreach($taxonomies as $taxonomy){
         echo $taxonomy;
   }
}

「分類ラベル:用語(ハイパーリンク)」という形式で機能し、表示されます。用語が複数ある場合は、用語間に「and」を追加します。私は用語だけを必要とし、もしそれらが複数であればそれらはコンマで分離されるべきです。

知りたい

  1. これらの結果を達成するための最善のアプローチ
  2. 上記の方法を使用することをお勧めしますか?
  3. regexを使って値を抽出できますか?
  4. どうすればハイパーリンクを取り除くことができますか?

ありがとう

1
Alena

あなたのコードに関する最初の問題は、 get_the_taxonomies 関数を使うことです、

名前だけで投稿のすべての分類法を取得します。

その結果は次のようになります。

Array
(
    [0] => category
    [1] => post_tag
    [2] => post_format
)

そして、分類法の名前ではなく、すべての分類法から特定の投稿に割り当てられた用語を取得することをお勧めします。

だから、おそらくあなたはこのようなことをしたいのです。

$terms = wp_get_object_terms( get_the_ID(), array_keys( get_the_taxonomies() ) );
foreach ( $terms as $i => $term ) {
    echo ($i ? ', ' : '') . $term->name;
}

そしてあなたの質問への素早い回答:

  1. 上記の考えられる解決策の1つ - それが最良のものであるかどうかを言うのは難しいです。
  2. いいえ、あなたの方法は解決策ではないと思います。
  3. 正規表現を使う必要はありません。必要がない場合は、正規表現を使用しないでください。
  4. ハイパーリンクを取り除くには、termオブジェクトを取得して自分でそれらを印刷します(上図を参照)。
1

これらを見てください。

$taxonomies = get_post_taxonomies( );
print_r( $taxonomies );
echo implode( $taxonomies, ', ' );
0
De Coder