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


How to create different post layout for different categories and subcategories in 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');
}
?>

这个代码有问题吗?每篇文章都以singleric.php布局

显示

您的问题解决了几个问题。首先,正如Pieter所说,您应该使用get_template_part而不是TEMPLATEPATH,因为它已被弃用。

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

它是多余的。当您在模板中时,全局var $post已经包含您查询的post。