3

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?

3

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

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.
}
  • Thanks but that doesn't really do the trick since this is for a dynamic page template. Is there a way to access the first term without specifying a name to it? – Philipp K Jun 19 '18 at 20:47

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.