91

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?

RonnieT
  • 2,193
  • 4
  • 32
  • 43

13 Answers13

212

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');
Rizier123
  • 58,877
  • 16
  • 101
  • 156
Ram Mehar Deswal
  • 2,358
  • 2
  • 14
  • 9
  • 4
    Exactly what I was looking for. Better than the above answer if you are creating a generic Category template as you only get the Category the page will display as opposed to the multi-Category array from the above. – theflowersoftime Sep 25 '12 at 16:59
  • It worked perfectly for me. I was having problem getting the ID and worked lovely for me. Saved hours :) – prakashchhetri Jul 12 '13 at 16:35
  • 3
    Need to replace the correct answer! The answer marked correct, misled me. – Mosh Feu Jun 18 '14 at 12:16
  • 14
    This answer has some unnecessary code. The first line of code gets the full category data in get_category function by using one parameter - CATEGORY ID (because this is what get_query_var( 'cat' ) returns). The second line of code actually retrieves the id from the data. This means that the get_category function is completely unused here and if someone wants only the id, then just get_query_var( 'cat' ) should be used! – Bartosz Górski Aug 26 '14 at 12:36
  • @RamMeharDeswal is it possible to use this method to get the child category ? – Rain Man Oct 30 '15 at 01:30
  • Good code mate, it works with pagination!!! get_the_category() gave a whole array in pagination instead of the current category. someone should changed the correct answer to this one! – Qin Wang Nov 27 '15 at 10:46
  • My test site contain uncategorized my post don't select any category and `get_query_var( 'cat' )` return empty. – vee Dec 08 '18 at 09:57
81

You can try using get_the_category():

$categories = get_the_category();
$category_id = $categories[0]->cat_ID;
ash108
  • 1,763
  • 1
  • 17
  • 21
39

The oldest but fastest way you can use is:

$cat_id = get_query_var('cat');
Fred K
  • 13,249
  • 14
  • 78
  • 103
24

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.

Shaffe
  • 1,265
  • 13
  • 11
4

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

Rizier123
  • 58,877
  • 16
  • 101
  • 156
Jorge Orpinel Pérez
  • 6,361
  • 1
  • 21
  • 38
2

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

honk31
  • 3,895
  • 3
  • 31
  • 30
1

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.

Bill
  • 3,478
  • 23
  • 42
1

Alternative -

 $catID = the_category_ID($echo=false);

EDIT: Above function is deprecated please use get_the_category()

Bheru Lal Lohar
  • 880
  • 9
  • 17
1

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);
nh-labs
  • 641
  • 7
  • 10
1

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);
Sam
  • 51
  • 13
0
$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;
  }
}
0

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);
Robert Sinclair
  • 4,550
  • 2
  • 44
  • 46
0

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
      }``
    }
    
     ?>
  • 2
    Hello Hemant Adhikari. Please separate the text from the code in your post. – Toni Sep 16 '21 at 10:39
  • Your answer could be improved with additional supporting information. Please [edit] to add further details, such as citations or documentation, so that others can confirm that your answer is correct. You can find more information on how to write good answers [in the help center](/help/how-to-ask). – Community Sep 16 '21 at 12:15