从 WooCommerce 中的当前产品类别中获取兄弟术语 ID 列表

Get a list of siblings term ids from current product category in WooCommerce

我想根据当前类别 ID 检索术语 ID 列表。

目前我正在使用以下代码:

$product_cat_items  = get_queried_object();
$product_cat_id     = $product_cat_items->term_id;
$product_cat_child  = get_term($product_cat_id, 'product_cat');
$product_cat_parent = $product_cat_child->parent;

$product_cat_related= get_terms('product_cat', array( 'parent' => $product_cat_parent, 'exclude' => $product_cat_id ));

它正在运行,我得到了一系列术语。 但问题是,我只需要术语对象的 ID 即可获得如下列表:

123,345,678

有没有办法从$product_cat_related数组中提取这样的列表?

这是当前输出:

array(2) {
  [0]=>
  object(WP_Term)#26238 (10) {
    ["term_id"]=>
    int(177)
    ["name"]=>
    string(27) "Name"
    ["slug"]=>
    string(21) "name"
    ["term_group"]=>
    int(0)
    ["term_taxonomy_id"]=>
    int(177)
    ["taxonomy"]=>
    string(11) "product_cat"
    ["description"]=>
    string(0) ""
    ["parent"]=>
    int(140)
    ["count"]=>
    int(8)
    ["filter"]=>
    string(3) "raw"
  }
  [1]=> ....
}

我在这里找到了解决方案:

对我来说,这段代码有效:

$idCats = array_column($product_cat_related, 'term_id');

自 WordPress 4.5.0 版起,分类法应通过 $args 数组中的“分类法”参数传递 (see get_terms() documentation).
此外,当查询的对象是分类术语时,get_queried_object() 已经给出了一个 WP_Term 对象。
您还可以使用 'fields' => 'ids' 作为 get_terms() 中的参数,以仅获取 term IDs 的数组而不是 WP_term 对象的数组 (参见 WP_Term_Query available arguments
最后,您将使用 PHP implode() 来获取一串以逗号分隔的术语 ID。

因此您的代码将改为:

$current_term = get_queried_object(); // Already a WP_Term Object

if ( $current_term->parent > 0 ) {
    $siblings_ids = get_terms( array(
        'taxonomy'  => 'product_cat',
        'parent'    => $current_term->parent,
        'exclude'   => $current_term->term_id,
        'fields'    => 'ids',
    ) );

    // Get a string of coma separated terms Ids
    $siblings_list_ids = implode(',', $siblings_ids);

    // Testing output
    echo $siblings_list_ids;
}

已测试并有效。