web-dev-qa-db-ja.com

ループ内で "the_terms"を処理する方法

私はグーグルを検索してきましたが、私は本当に混乱しています。投稿に割り当てられた分類法の用語を表示しようとしています。私はthe_terms($post->ID, 'locations');を使っています。カスタム分類法は階層的です。

例:投稿に割り当てられた3つの用語:USA(parent) > FL(direct child of "USA") > Miami(direct child of "FL")。得られるもの:FL, Miami, USAこれは、用語がアルファベット順に表示されていることを意味します。それらをMiami, FL, USAのように表示したいです。これは達成できますか?私はまた、用語からアンカーを取り除きたいのですが、strip_tags(the_terms($post->ID, 'locations'))はうまくいきません。

グーグルで検索している間、何人かの人がget_terms()他のget_the_termsそして他の人がthe_termsを使っています。これらの機能の違いは何ですか?私は正しいものを使っていますか?

1
Arg Geo

あなたの最初の質問に答えるために

これらの機能の違いは何ですか

  • get_terms() は特定の分類法に属する用語オブジェクトの配列を返します

  • get_the_terms() は投稿に属する用語の配列を返します

  • the_terms() は投稿に属する用語名のHTMLフォーマット文字列を表示します

あなたはあなたの用語がハイパーリンクされていないし、親に従って順序付けられている必要があるので、ここでは wp_get_object_terms() がより良い選択肢になると思います。 wp_get_object_terms()は投稿に属する一連の用語も返しますが、より柔軟です。投稿ごとに追加のdb呼び出しを行うときには、この柔軟性に対してお金を払う必要があります。

これらすべてを念頭に置いて、次のことを試すことができます。(すべてのコードはテストされていません

$args = [
    'orderby' => 'parent', 
    'order'   => 'DESC' 
];
$terms  = wp_get_object_terms( $post->ID, 'locations', $args );
$names  = wp_list_pluck( $terms, 'name' );
$output = implode( ', ', $names );
echo $output;
3
Pieter Goosen