如何在wordpress中为不同的类别和子类别创建不同的帖子布局

时间:2015-11-03 10:05:51

标签: php wordpress

我修改了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');
}
?>

这段代码有什么问题吗? 每篇文章都以单个ric.php布局显示

1 个答案:

答案 0 :(得分:0)

您的问题解决了一些问题。首先,正如彼得所说,你应该使用get_template_part而不是TEMPLATEPATH作为it is deprecated

您需要做的是将模板重命名为singlepost-ric.phpsinglepost-parl.phpsinglepost.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;

这是多余的。当您在模板中时,全局变量$post已包含您查询的帖子。