skip to Main Content

I want to retrieve a list of term Ids based on the current category ID.

At the moment I’m using the following code:

$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 ));

It’s working and I get an array of the terms.
But the probem is, that I only need the IDs from the term object to get a list like this:

123,345,678

Is there any way to extract such a list from the $product_cat_related array?

This is the current output:

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]=> ....
}

2

Answers


  1. Chosen as BEST ANSWER

    I found a solution here: https://stackoverflow.com/a/25286095/1788961

    For me this code works:

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

  2. Since WordPress version 4.5.0, taxonomies should be passed via the "taxonomy" argument in the $args array (see get_terms() documentation).
    Also get_queried_object() already gives a WP_Term Object when the queried Object is a taxonomy term.
    Also you can use 'fields' => 'ids' as an argument in get_terms(), to get only an array of term Ids instead of an array of WP_term Objects (see WP_Term_Query available arguments).
    To finish, you will use PHP implode() to get a string of coma separated terms Ids.

    So your code will be instead:

    $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;
    }
    

    Tested and works.

    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search