How to display post tag on each post? [closed]

I need to display it on each post and only the first state if it has
multiple states

I noticed there are $categories = get_the_category(); and echo esc_html($categories[0]->name); in your code, which display the first category for the current post, but then note that get_the_category() only returns results for the default/core category taxonomy.

For custom taxonomies, you should use get_the_terms() instead of get_the_category(). And just so you know, for tags, i.e. the default post_tag taxonomy, you can use get_the_tags().

Working Examples

  1. Display the first category term for the current post:

    (you already have this in your code, but I included this just for completeness)

    $categories = get_the_category();
    if ( ! empty( $categories ) ) {
        echo esc_html( $categories[0]->name );
    }
    
  2. Display the first post_tag term for the current post:

    $tags = get_the_tags();
    if ( is_array( $tags ) && ! empty( $tags ) ) {
        echo esc_html( $tags[0]->name );
    }
    
  3. Display the first state term for the current post:

    $states = get_the_terms( get_the_ID(), 'state' );
    if ( is_array( $states ) && ! empty( $states ) ) {
        echo esc_html( $states[0]->name );
    }
    

So as you could see, in the last example, I used get_the_terms() because state is a custom taxonomy.