Most of the above examples work but if you are using multiple categories NONE *(as of writing, WP version 3.6)* of the other methods work to get all the categories that have been passed to either "cat" or "category_name". This is the kind of archive URL with multiple categories: https://yoursite.com/cateogry/blue+yellow/ (yeah this kind of URL works every wordpress site but its not used much) The only way I have found is to pull the data from: $wp_query->query['category_name'] For some reason this returns a different value to `get_query_var( 'category_name' )` which only returns the first category. When using multiple categories you will have to use some function like `explode` to get an array of category slugs, then loop through that to grab all the IDs: <?php global $wp_query; //grab all categories from query string (if using `category_name`) $category_slugs_array = explode("+",esc_attr($wp_query->query['category_name'])); $categories = array(); $category_ids = array(); //loop through all the slugs foreach($category_slugs_array as $category_slug) { //get category object using slug $category = get_category_by_slug( $category_slug ); //check to make sure a matching category has been found if(isset($category->cat_ID)) { $categories[] = $category; $category_ids[] = $category->cat_ID; } } var_dump($categories); //array of categories var_dump($category_ids); //array of category IDs ?> Obviously there needs to be some considerations when using AND (+) or OR (,) operators.