web-dev-qa-db-ja.com

項オブジェクトが配列内にあるかどうかを確認

オブジェクトという用語がget_terms配列に含まれているかどうかを確認したいのですが、その方法がわかりません。

$subcat_terms = get_terms([
  'taxonomy' => 'product_cat'
]);

$ subcat_termsは次のような配列を生成します。

array (size=3)
0 => 
object(WP_Term)[10551]
  public 'term_id' => int 16
  public 'name' => string 'Hardware' (length=8)
  public 'slug' => string 'hardware' (length=8)
  public 'term_group' => int 0
  public 'term_taxonomy_id' => int 16
  public 'taxonomy' => string 'product_cat' (length=11)
  public 'description' => string '' (length=0)
  public 'parent' => int 0
  public 'count' => int 4
  public 'filter' => string 'raw' (length=3)
  public 'meta_value' => string '0' (length=1)

私はphp関数in_arrayを使ってチェックしようとしましたが、オブジェクトを持っているのでこれを行う方法がわかりません。オブジェクト番号という用語で、または可能であればslugという用語でチェックしたいのです。誰かが私を助けてくれたら私は感謝するでしょう。

1
Gabriel Souza

WordPressにはwp_list_pluck関数があり、これはここで役に立ちます。次のように、オブジェクトの配列から用語IDだけの配列を作成できます。

$term_ids = wp_list_pluck( $subcat_terms, 'term_id' );

それならin_arrayをチェックすることができます:

$this_id = 42;
if( in_array( $this_id, $term_ids ) ){ // do something }
6
Milo

単純なforeachループを使用して、特定のslug(またはterm_idまたはその他のプロパティ)がget_terms()から返される結果に含まれているかどうかを確認できます。

次の例では、$special_term_slugsは検索したいスラッグを保持しています。ここでは複数のスラッグを検索できるように配列を使用しましたが、スラッグを1つだけ使用しても問題ありません。

この場合、目的の分類法、product_cat、に対するすべての用語が得られます。

結果が返された場合は、現在のtermオブジェクトが$special_term_slugs配列で定義されているスラッグの1つに一致するかどうかを確認するために結果を繰り返します。

// Array of term slugs to check for. Customize as needed.
$special_term_slugs = [
    'hardware',
];

// Attempt to get the terms.
$subcat_terms = get_terms( [
    'taxonomy' => 'product_cat'
] );

// If we get results, search for our special term slugs.
if ( is_array( $subcat_terms ) ) {
    foreach ( $subcat_terms as $subcat_term ) {
        if ( in_array( $subcat_term->slug, $special_term_slugs ) ) {
             // Special term was found. Do something...

        }
    }
}
1
Dave Romsey