检查术语对象是否在数组中

时间:2018-04-04 作者:Gabriel Souza

我想检查一个term对象是否在get\\u terms数组中,但我真的不知道该怎么做。

$subcat_terms = get_terms([
  \'taxonomy\' => \'product_cat\'
]);
$subcat\\u 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)
我试着用\\u array中的php函数进行检查,但由于它有对象,我不知道如何进行检查,我想通过术语object number进行检查,或者如果可能的话通过术语slug进行检查。如果有人帮助我,我将不胜感激。

2 个回复
最合适的回答,由SO网友:Milo 整理而成

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 }

SO网友:Dave Romsey

一个简单的foreach 循环可用于检查slug (或term_id 或任何其他属性)在返回的结果中get_terms().

在以下示例中,$special_term_slugs 保存着我们想要寻找的鼻涕虫。我在这里使用了一个数组,这样我们就可以搜索多个slug,尽管只使用一个slug很好。

我们得到了所需分类的所有术语,product_cat, 在这种情况下。

如果返回结果,我们将遍历它们,检查当前的term对象是否与$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...

        }
    }
}

结束