WordPress 中文文档

Function Reference/in category

出自WordPress Chinese 中文文档

跳转到: 导航, 搜索

wordpress.org.cn

目录

Description

Tests if the current post (or any specified post) is assigned to any of the specified categories.

ttin_category()/tt considers only the categories a post is directly assigned to (the checked categories in emWrite/Edit Post/em panel), not the parents of the assigned categories (but see Testing if a post is in a descendant category below).

This tag can be used to test the current post within The Loop or (since Version 2.7) outside the Loop during a single post request. You can use it anywhere if you specify which post you want to test.

Usage

%%%?php in_category( $category, $_post ) ?%%%

Parameters

tt$category/tt
(mixed) (required) One or more categories specified by ID (integer), name or slug (string), or an array of these
Default: Nonenoinclude

div class=template-description style=padding: 0 1.5em; border: 1px solid #eeeeee; background-color: #f9f9f9

Notes

This template is for standardizing how parameters look in the Function Reference and in Template Tags. Here is an example of this template being called: prenowiki已侦测回归模板: Template:Parameter/nowiki/pre 已侦测回归模板: Template:Parameter

The usage of this template is below: prenowiki已侦测回归模板: Template:Parameter/nowiki/pre Let's take a closer look at the parameters..

name
The name of the parameter.
datatype
The datatype that should be given for this parameter when called.
  • string
  • integer
  • boolean
  • mixed
description
A short description of the parameter.
importance
Set this parameter to optional if the parameter is optional. Otherwise, do not declare this parameter—it defaults to required.
  • required
  • optional
default
If this parameter is optional, ttdefault/tt is the value that will be used if the parameter is not declared.

wordpress.org.cn /div /noinclude

tt$_post/tt
(mixed) (optional) The post (integer ID or object). Defaults to the current post in the Loop or the post in the main query.
Default: Nonenoinclude

div class=template-description style=padding: 0 1.5em; border: 1px solid #eeeeee; background-color: #f9f9f9

Notes

This template is for standardizing how parameters look in the Function Reference and in Template Tags. Here is an example of this template being called: prenowiki已侦测回归模板: Template:Parameter/nowiki/pre 已侦测回归模板: Template:Parameter

The usage of this template is below: prenowiki已侦测回归模板: Template:Parameter/nowiki/pre Let's take a closer look at the parameters..

name
The name of the parameter.
datatype
The datatype that should be given for this parameter when called.
  • string
  • integer
  • boolean
  • mixed
description
A short description of the parameter.
importance
Set this parameter to optional if the parameter is optional. Otherwise, do not declare this parameter—it defaults to required.
  • required
  • optional
default
If this parameter is optional, ttdefault/tt is the value that will be used if the parameter is not declared.

wordpress.org.cn /div /noinclude

Return Values

(boolean) 
Whether the post is assigned to any of the specified categories.

Notes

  • Since Version 2.5, you can specify categories by name.
  • Since Version 2.7, you can specify categories by slug.
  • Since Version 2.7, you can check against several categories.
  • Since Version 2.7, you can use this function outside the WordPress Loop (during a single post query, presumably)
  • Since Version 2.7, you can specify any post to test (not just the current one).

Examples

Testing the current post within the Loop

ttin_category()/tt is often used to take different actions within the Loop depending on the current post's category, e.g.

pre?php if ( in_category( 'pachoderms' )) { // They have long trunks... } elseif ( in_category( array( 'Tropical Birds', 'small-mammals' ) )) { // They are warm-blooded... } else { // c. } ?/pre

Testing the current post outside the Loop

During a request for an individual post (usually handled by the ttsingle.php/tt template), you can test that post's categories even before the Loop is begun.

You could use this to switch templates like so:

pre?php if ( in_category('fruit') ) { include 'single-fruit.php'; } elseif ( in_category('vegetables') ) { include 'single-vegetables.php'; } else { // Continue with normal Loop if ( have_posts() ) : while ( have_posts() ) : the_post(); // ... } ?/pre

(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 if a post is in a descendant category

When showing a category archive, or showing a category's posts via ttquery_posts()/tt or ttget_posts()/tt, WordPress retrieves posts from the specified category emand/em any descendant (child) categories, but ttin_category()/tt tests only against a post's assigned categories, not ancestors (parents) of those categories.

For example, if you have a post assigned to the subcategory emFruit rarr; Bananas/em and not the category emFruit/em, the emFruit/em category archive will show the Bananas post, but calling codein_category('fruit')/code for that post always returns ttfalse/tt.

You can list both the ancestor category and every possible descendant category, e.g.,

pre?php if ( in_category( array( 'fruits', 'apples', 'bananas', 'cantaloupes', 'guavas', /*etc*/ ) )) { // These are all fruits } ?/pre

but you'd have to edit the code every time you moved or added any of the Fruit categories.

A more-flexible method is to use or adapt the ttpost_is_in_descendant_category/tt function defined below (you need to copy the function definition below into a template, plugin, or theme functions file before calling it). You can use it together with ttin_category()/tt like this (in this example 11 is the Fruit category's ID number):

pre // Post is assigned to fruit category or any descendant of fruit category? ?php if ( in_category( 'fruit' ) || post_is_in_descendant_category( 11 ) ) { // These are all fruits… } ?/pre

If you'd rather refer to the category by name you can use, e.g.,

 post_is_in_descendant_category( get_term_by( 'name', 'fruit', 'category' ) )

post_is_in_descendant_category function

pre?php /**

* Tests if any of a post's assigned categories are descendants of target categories
*
* @param int|array $cats The target categories. Integer ID or array of integer IDs
* @param int|object $_post The post. Omit to test the current post in the Loop or main query
* @return bool True if at least 1 of the post's categories is a descendant of any of the target categories
* @see get_term_by() You can get a category by name or slug, then pass ID to this function
* @uses get_term_children() Passes $cats
* @uses in_category() Passes $_post (can be empty)
* @version 2.7
* @link http://codex.wordpress.org/Function_Reference/in_category#Testing_if_a_post_is_in_a_descendant_category
*/

function post_is_in_descendant_category( $cats, $_post = null ) { foreach ( (array) $cats as $cat ) { // get_term_children() accepts integer ID only $descendants = get_term_children( (int) $cat, 'category'); if ( $descendants in_category( $descendants, $_post ) ) return true; } return false; } ?/pre

Related

the_category, the_category_rss, single_cat_title, category_description, wp_dropdown_categories, wp_list_categories, get_the_category, get_category_parents, get_category_link, is_category, in_category

includeonlydiv style=clear:both; background-color:#F7F7F7; border:1px solid #CCCCCC; color:#000000; padding:7px; margin:0.5em auto 0.5em auto; vertical-align:middle;See also index of Function Reference and index of Template Tags./div/includeonlynoinclude

Description

This Template is used by Codex:Template Messages.

Usage

pre 已侦测回归模板: Template:Message /pre

Result

已侦测回归模板: Template:Message

/noinclude

wordpress