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() .


Top ↑

Parameters

$post_id int Optional
The post ID. Defaults to current post ID.

Default: false


Top ↑

Return

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


Top ↑

Source

File: wp-includes/category-template.php. View all references

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

Top ↑

Hooks



Top ↑

Changelog

Changelog
Version Description
0.71 Introduced.

Top ↑

User Contributed Notes

  1. Skip to note 1 content
    Contributed by Codex

    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 2 content
    Contributed by Stefano

    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 3 content
    Contributed by juanvillegas

    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 4 content
    Contributed by Codex

    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 6 content
    Contributed by fgilio

    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 9 content
    Contributed by Codex

    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.