web-dev-qa-db-fra.com

Vérifier si le terme objet est dans le tableau

Je veux vérifier si un objet terme est dans un tableau get_terms, mais je ne peux vraiment pas comprendre comment le faire.

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

$ subcat_terms génère un tableau comme celui-ci:

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)

J'ai essayé de vérifier avec la fonction in_array de PHP, mais comme il a des objets, je ne sais pas comment faire cela, je voudrais vérifier par le terme numéro d'objet ou si possible par le terme slug. Je serai reconnaissant si quelqu'un m'aide.

1
Gabriel Souza

WordPress a la fonction wp_list_pluck, ce qui peut être utile ici. Nous pouvons créer un tableau d'ID de termes simples à partir d'un tableau d'objets comme:

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

Ensuite, nous pouvons vérifier in_array:

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

Une simple boucle foreach peut être utilisée pour vérifier si une certaine slug (ou term_id ou toute autre propriété) figure dans les résultats renvoyés par get_terms().

Dans l'exemple suivant, $special_term_slugs contient les slugs que nous souhaitons rechercher. J'ai utilisé un tableau ici pour que nous puissions rechercher plusieurs slugs, bien que ce ne soit pas grave de n'utiliser qu'un seul slug.

Nous obtenons tous les termes de la taxonomie souhaitée, product_cat, dans ce cas.

Si les résultats sont renvoyés, nous les parcourons en vérifiant si le terme objet en cours correspond à l'un des slugs définis dans notre tableau $special_term_slugs.

// 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