get_the_category( int $post_id = false ): WP_Term[]

Retrieves post categories.

Description

This tag may be used outside The Loop by passing a post ID as the parameter.

Note: This function only returns results from the default "category" taxonomy.
For custom taxonomies use get_the_terms() .

Parameters

$post_idintoptional
The post ID. Defaults to current post ID.

Default:false

Return

WP_Term[] Array of WP_Term objects, one for each category assigned to the post.

Source

function get_the_category( $post_id = false ) {
	$categories = get_the_terms( $post_id, 'category' );
	if ( ! $categories || is_wp_error( $categories ) ) {
		$categories = array();
	}

	$categories = array_values( $categories );

	foreach ( array_keys( $categories ) as $key ) {
		_make_cat_compat( $categories[ $key ] );
	}

	/**
	 * Filters the array of categories to return for a post.
	 *
	 * @since 3.1.0
	 * @since 4.4.0 Added the `$post_id` parameter.
	 *
	 * @param WP_Term[] $categories An array of categories to return for the post.
	 * @param int|false $post_id    The post ID.
	 */
	return apply_filters( 'get_the_categories', $categories, $post_id );
}

Hooks

apply_filters( ‘get_the_categories’, WP_Term[] $categories, int|false $post_id )

Filters the array of categories to return for a post.

Changelog

VersionDescription
0.71Introduced.

User Contributed Notes

  1. Skip to note 10 content

    Show the First Category Name Only

    $categories = get_the_category();
    
    if ( ! empty( $categories ) ) {
    	echo esc_html( $categories[0]->name );	
    }

    (Echoes the first array element ([0]) of $categories.)

    Make the first category link to the category page:

    $categories = get_the_category();
    if ( ! empty( $categories ) ) {
    	echo '<a href="' . esc_url( get_category_link( $categories[0]->term_id ) ) . '">' . esc_html( $categories[0]->name ) . '</a>';
    }
  2. Skip to note 11 content

    Get the post category if you have a custom post_type

    <?php
    /* FIRST
     * Note: This function only returns results from the default “category” taxonomy. For custom taxonomies use get_the_terms().
     */
    $categories = get_the_terms( $post->ID, 'taxonomy' );
    // now you can view your category in array:
    // using var_dump( $categories );
    // or you can take all with foreach:
    foreach( $categories as $category ) {
        echo $category->term_id . ', ' . $category->slug . ', ' . $category->name . '<br />';
    }
  3. Skip to note 12 content

    Example response from function:

    $categories = get_the_category();
    
    var_dump($categories);
    array(1) {
    [0]=>
      object(stdClass)#310 (17) {
        ["term_id"]=>
        &int(6)
        ["name"]=>
        &string(10) "familylife"
        ["slug"]=>
        &string(10) "familylife"
        ["term_group"]=>
        int(0)
        ["term_taxonomy_id"]=>
        int(6)
        ["taxonomy"]=>
        string(8) "category"
        ["description"]=>
        &string(0) ""
        ["parent"]=>
        &int(0)
        ["count"]=>
        &int(208)
        ["object_id"]=>
        int(7729)
        ["filter"]=>
        string(3) "raw"
        ["cat_ID"]=>
        &int(6)
        ["category_count"]=>
        &int(208)
        ["category_description"]=>
        &string(0) ""
        ["cat_name"]=>
        &string(10) "familylife"
        ["category_nicename"]=>
        &string(10) "familylife"
        ["category_parent"]=>
        &int(0)
      }
    }
  4. Skip to note 13 content

    Show All Categories as Links
    This outputs all the categories assigned to the post as links. Must be used inside the loop. You can also use the function get_the_category_list() for this.

    $categories = get_the_category();
    $separator = ' ';
    $output = '';
    if ( ! empty( $categories ) ) {
    	foreach( $categories as $category ) {
    		$output .= '<a href="' . esc_url( get_category_link( $category->term_id ) ) . '" alt="' . esc_attr( sprintf( __( 'View all posts in %s', 'textdomain' ), $category->name ) ) . '">' . esc_html( $category->name ) . '</a>' . $separator;
    	}
    	echo trim( $output, $separator );
    }
  5. Skip to note 15 content

    To display a list of categories associated with a post, separated by commas, write this code:


    $cats = array();
    foreach (get_the_category($post_id) as $c) {
    $cat = get_category($c);
    array_push($cats, $cat->name);
    }

    if (sizeOf($cats) > 0) {
    $post_categories = implode(', ', $cats);
    } else {
    $post_categories = 'Not Assigned';
    }

    echo $post_categories;

  6. Skip to note 18 content

    Show Category Images
    This outputs category images named after the cat_ID with the alt attribute set to cat_name. You can also use any of the other member variables instead.

    <?php
    $categories = get_the_category();
    foreach ( $categories as $category ) { 
    	echo '<img src="' . esc_url( 'http://example.com/images/' . intval( $category->term_id ) . '.jpg' ) . '" alt="' . esc_attr( $category->name ) . '" />'; 
    }

You must log in before being able to contribute a note or feedback.