下面是我要做的,首先我将这个函数添加到我的主题函数中。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
*/
if ( ! function_exists( \'post_is_in_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;
}
}
然后,我创建一个函数,根据我挂钩到的父类别选择正确的模板
single_template
吊钩ex:
add_action( \'single_template\', \'post_template_selector\' );
function post_template_selector($single_template) {
global $wp_query;
global $wp;
if ( $wp_query->query_vars[\'post_type\'] === \'post\' ) {
if ( have_posts()){
//create an array of parent category => template file name ex:
$cats_templates = array(
\'12\' => \'post_in_cat_12_file.php\',
\'32\' => \'post_in_cat_32_file.php\',
\'56\' => \'post_in_cat_56_file.php\',
);
foreach ($cats_templates as $cat => $template) {
if (in_category($cat) || post_is_in_descendant_category($cat))
return $template;
}
}
}
return $single_template;
}
当心
$cats_templates
数组,用于为类别Y下的帖子定义模板X。