Get current category ID of the active page

PhpWordpressWordpress ThemingCategories

Php Problem Overview


Looking to pull the category ID of a specific page in WordPress that is listing all posts using that specific category. Tried the below but not working. I am able to get the category name using single_term_title.

$category = single_term_title("", false);
$catid = get_cat_ID( $category );

$category is displaying "Entertainment" for example. But I also need the ID of "Entertainment". How would I go about this?

Php Solutions


Solution 1 - Php

If it is a category page,you can get id of current category by:

$category = get_category( get_query_var( 'cat' ) );
$cat_id = $category->cat_ID;

If you want to get category id of any particular category on any page, try using :

$category_id = get_cat_ID('Category Name');

Solution 2 - Php

You can try using http://codex.wordpress.org/Function_Reference/get_the_category">`get_the_category()`</a>;:

$categories = get_the_category();
$category_id = $categories[0]->cat_ID;

Solution 3 - Php

The oldest but fastest way you can use is:

$cat_id = get_query_var('cat');

Solution 4 - Php

I use the get_queried_object function to get the current category on a category.php template page.

$current_category = get_queried_object();

Jordan Eldredge is right, get_the_category is not suitable here.

Solution 5 - Php

I think some of the above may work but using the get_the_category function seems tricky and may give unexpected results.

I think the most direct and simple way to access the cat ID in a category page is:

$wp_query->query_vars['cat']

Cheers

Solution 6 - Php

if you need the category ID, you would get it via get_query_var, that is capable of retrieving all publicly queryble variables.

$category_id = get_query_var('cat');

here is an example to get the category name

$category_name = get_query_var('category_name');

and of course the all mighty get_queried_object

$queried_object = get_queried_object();

that is returning the complete taxonomy term object (when used on a taxonomy-archive page..)

Solution 7 - Php

I found this question whilst looking for exactly what you asked. Unfortunately you have accepted an incorrect answer. For the sake of other people who are trying to achieve what we were trying to achieve, I thought I'd post the correct answer.

$cur_cat = get_cat_ID( single_cat_title("",false) );

As you said single_term_title("", false); was correctly returning the category title, I'm not sure why you would have had troubles with your code; but the above code works flawlessly for me.

Solution 8 - Php

Alternative -

 $catID = the_category_ID($echo=false);

EDIT: Above function is deprecated please use get_the_category()

Solution 9 - Php

I used this for breadcrums in the category template page:

$cat_obj = $wp_query->get_queried_object();
$thiscat_id = $cat_obj->term_id;
$thiscat = get_category($thiscat_id);
$parentcat = get_category($thiscat->parent);

Solution 10 - Php

$cats = wp_get_post_terms( $post->ID, 'product_cat' );
foreach($cats as $cat){
/*check for category having parent or not except category id=1 which is wordpress default category (Uncategorized)*/
  if($cat->parent != '0' && $cat->term_id != 1){
    echo '<h2 class="link"><a href="'.get_category_link($cat->term_id ).'">'.$cat->name.'</a></h2>';
	break;
  }
}

Solution 11 - Php

Tried above for solutions to find cat ID of a post, but nothing worked, used the following instead:

$obj = get_queried_object();
$c_id = wp_get_post_categories($obj->ID);

Solution 12 - Php

Here's an efficient method to get category meta data, along with HTML if you want to print it out on the front-end:

    <?php
    
    function custom_get_categories() {
      $categories = get_the_category();
      $uncategorised_id = get_cat_ID('Uncategorized');
      $custom_category_link = '';
    
      foreach ($categories as $category) {
        if($category->category_parent == $uncategorised_id || $category->cat_ID == $uncategorised_id) {
          continue;
        }
        
        $custom_category_link = get_category_link($category->cat_ID); ?>
    
        <a href ="<?php echo $custom_category_link ?>"> 
    <?php echo "\n\nCategory ID: " . $category->cat_ID . "\nCategory Name" . $category->name;  ?> </a>
    
        <?php
      }``
    }
    
     ?>

Solution 13 - Php

I tested all these answers and this is the only one which works on all archive page types including posts page.

$category_id = get_the_category( get_the_ID());
$cat_id      = get_category($category_id[0]->term_id);

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionRonnieTView Question on Stackoverflow
Solution 1 - PhpRam Mehar DeswalView Answer on Stackoverflow
Solution 2 - Phpash108View Answer on Stackoverflow
Solution 3 - PhpFred KView Answer on Stackoverflow
Solution 4 - PhpShaffeView Answer on Stackoverflow
Solution 5 - PhpJorge Orpinel PérezView Answer on Stackoverflow
Solution 6 - Phphonk31View Answer on Stackoverflow
Solution 7 - PhpBillView Answer on Stackoverflow
Solution 8 - PhpBheru Lal LoharView Answer on Stackoverflow
Solution 9 - Phpnh-labsView Answer on Stackoverflow
Solution 10 - PhpAbhijit PatelView Answer on Stackoverflow
Solution 11 - PhpRobert SinclairView Answer on Stackoverflow
Solution 12 - PhpHemant AdhikariView Answer on Stackoverflow
Solution 13 - PhpSamView Answer on Stackoverflow