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