in_category( int|string|int[]|string[] $category, int|object $post = null )
Checks if the current post is within any of the given categories.
Description Description
The given categories are checked against the post’s categories’ term_ids, names and slugs. Categories given as integers will only be checked against the post’s categories’ term_ids.
Prior to v2.5 of WordPress, category names were not supported. Prior to v2.7, category slugs were not supported. Prior to v2.7, only one category could be compared: in_category( $single_category ). Prior to v2.7, this function could only be used in the WordPress Loop. As of 2.7, the function can be used anywhere if it is provided a post ID or post object.
For more information on this and similar theme functions, check out the Conditional Tags article in the Theme Developer Handbook.
Parameters Parameters
- $category
-
(int|string|int[]|string[]) (Required) Category ID, name, slug, or array of such to check against.
- $post
-
(int|object) (Optional) Post to check instead of the current post.
Default value: null
Return Return
(bool) True if the current post is in any of the given categories.
Source Source
File: wp-includes/category-template.php
function in_category( $category, $post = null ) { if ( empty( $category ) ) { return false; } return has_category( $category, $post ); }
Expand full source code Collapse full source code View on Trac
Changelog Changelog
Version | Description |
---|---|
2.7.0 | The $post parameter was added. |
1.2.0 | Introduced. |
User Contributed Notes User Contributed Notes
You must log in before being able to contribute a note or feedback.
Testing the current post outside the Loop
During a request for an individual post (usually handled by the single.php template), you can test that post’s categories even before the Loop is begun.
You could use this to switch templates like so:
(The Custom Post Templates Plugin allows for creation of templates for single posts. It also shows an example of how to add a template which is used for all posts in a given category, not just a single post. That example is commented out in the plugin by default but can be easily implemented by uncommenting the appropriate lines.)
Testing the current post within the Loop
in_category()
is often used to take different actions within the Loop depending on the current post’s category, e.g.To check whether a post is within a parent category or any of it’s subcategories:
Expand full source codeCollapse full source code
Use for checking if within a single cat:
Use for checking if within an array of parent categories, or any of their subcats: