我修改了single.php文件,以便更改每个类别的布局。在single.php中,我有这个代码
<?php
$post = $wp_query->post;
if ( in_category( '26') || get_term_children('26') {
include(TEMPLATEPATH . '/single-ric.php');
}
elseif ( in_category( '36') || get_term_children('36') {
include(TEMPLATEPATH . '/single-parl.php');
}
else {
include(TEMPLATEPATH . '/single-all.php');
}
?>
这个代码有问题吗?每篇文章都以singleric.php布局
您的问题解决了几个问题。首先,正如Pieter所说,您应该使用get_template_part
而不是TEMPLATEPATH
,因为它已被弃用。
您需要做的是将模板重命名为singlepost-ric.php
、singlepost-parl.php
和singlepost.php
(而不是singlepost-all.php
——这将是您的后备),这是为了防止任何后备循环冲突——您需要将它们放在与single.php
相同的级别才能使其工作。然后,以这种方式使用get_template_part
:
get_template_part('singlepost', 'ric');
如果这不起作用,使用它来获取可能的错误消息:
assert("locate_template( array('singlepost-ric.php', 'singlepost.php'), false, false )");
另一个问题是,为什么你的第一个条件总是成立的,就是你没有使用正确的get_term_children
。此函数用于获取单个数组中一个术语的所有子项。如果找不到,它将返回一个空数组,而不是false
。这就是为什么这个(in_category( '26') || get_term_children('26'))
总是正确的。顺便说一句,在所有条件中都缺少一个右括号。
我想你想做的是知道当前帖子是否属于26
类别。只需删除get_term_children
部分,它就可以解决其他问题。您添加这个可能是因为类别是一个分类法,这在当时是有效的,但in_category
就足够了。
最后一件事,你不需要这个:
$post = $wp_query->post;
它是多余的。当您在模板中时,全局var $post
已经包含您查询的post。