How do I access a single term from a post?

I need help accessing a specific term from a custom taxonomy.

I am getting the terms with

 $terms = wp_get_post_terms($post->ID, 'mytax', array("fields" => "all"));

If I print_r($terms) this is what I get:

Array ( 
    [0] => WP_Term Object ( 
        [term_id] => 30 
        [name] => Term1 
        [slug] => term1 
        [term_group] => 0 
        [term_taxonomy_id] => 30 
        [taxonomy] => mytax 
        [description] => 
        [parent] => 0 
        [count] => 78 
        [filter] => raw 
    ) 
    [1] => WP_Term Object ( 
        [term_id] => 32 
        [name] => Term2 
        [slug] => term2 
        [term_group] => 0 
        [term_taxonomy_id] => 32 
        [taxonomy] => mytax 
        [description] => 
        [parent] => 30 
        [count] => 44 
        [filter] => raw 
    ) 
)

How do I extract the ID for Term1 out of this array?

Answers 2

  • It's a little bit hard to be sure, what are you asking exactly, but... Let me try to answer...

    So somewhere in single.php you're getting terms for current post using this code:

    $terms = wp_get_post_terms($post->ID, 'mytax', array("fields" => "all"));
    

    and you want to get the ID of first term from that list?

    If so, you can achieve this with this code:

    $terms = wp_get_post_terms($post->ID, 'mytax', array("fields" => "all"));
    $term_id = false;
    if ( $terms ) {
        $term_id = $terms[0]->term_id;
    }
    

  • You can just grab a single term, if that's what you want to do.

    Using get_term_by():

    $term = get_term_by( 'name', 'Term1', 'mytax' );
    

    should deliver the WP_Term object for the term named Term1 in the taxonomy mytax.

    [edit] Get the first term:

    $terms = wp_get_post_terms( $post->ID, 'mytax', array( "fields" => "all" ) );
    if ( ! empty( $terms ) {
        $term = $terms[0];
        $term_id = $terms[0]->term_id; // If you just need the term ID.
    }
    

    This will grab the first term from the list you're getting in the original question. Be aware, though, that by default, wp_get_post_terms() sorts the terms in ascending order by their name field. You can modify this using order and orderby in the $args parameter:

    $args = array(
        'fields'  => 'all',
        'orderby' => 'slug',
        'order'   => 'DESC',
        // ...for example.
    );
    $terms = wp_get_post_terms( $post->ID, 'mytax', $args ) );
    if ( ! empty( $terms ) {
        $term = $terms[0];
        $term_id = $terms[0]->term_id; // If you just need the term ID.
    }
    

Related Questions