Проверьте, находится ли объект термина в массиве


Я хочу проверить, находится ли объект term в массиве 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. Я буду благодарен, если кто-нибудь мне поможет.

Author: Gabriel Souza, 2018-04-04

2 answers

В WordPress есть функция wp_list_pluck, которая может быть полезна здесь. Мы можем создать массив только идентификаторов терминов из массива объектов, таких как:

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

Тогда мы можем проверить in_array:

$this_id = 42;
if( in_array( $this_id, $term_ids ) ){ // do something }
 6
Author: Milo, 2018-04-04 04:13:29

Простой цикл foreach можно использовать для проверки наличия определенного slug (или term_id или любого другого свойства) в результатах, возвращаемых get_terms().

В следующем примере $special_term_slugs содержит пули, которые мы хотели бы найти. Я использовал здесь массив, чтобы мы могли искать несколько пуль, хотя вполне нормально использовать только одну пулю.

В этом случае мы получаем все термины для желаемой таксономии, product_cat.

Если результаты возвращаются, мы повторяем их, проверяя, чтобы увидеть если текущий объект термина соответствует одному из слизней, определенных в нашем массиве $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
Author: Dave Romsey, 2018-04-04 03:04:44