如何在wordpress中为不同的类别和子类别创建不同的帖子布局
我修改了single.php文件以更改每个类别的布局。在single.php我有这个代码如何在wordpress中为不同的类别和子类别创建不同的帖子布局
<?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布局
您的问题地址几个问题。首先,如Pieter所述,您应该使用get_template_part
而不是TEMPLATEPATH
作为it is deprecated。
你需要做的是你的模板重命名为类似singlepost-ric.php
,singlepost-parl.php
和singlepost.php
(而不是singlepost-all.php
- 这将是你的回退),这对防止任何备用环路冲突 - 你需要将它们在同一级别为single.php
,以使这项工作。
get_template_part('singlepost', 'ric');
如果这不工作,用这个来获取可能的错误消息:
assert("locate_template(array('singlepost-ric.php', 'singlepost.php'), false, false)");
另一个问题是,为什么你的第一个条件总是然后,以这种方式使用get_template_part
是的,你是不是正确使用get_term_children
。此函数用于获取单个数组中的所有术语的儿童。如果找不到,它将返回一个空数组,而不是false
。这就是为什么这个(in_category('26') || get_term_children('26'))
总是如此。顺便说一句,你在所有条件下都缺少右括号。
我假设你想要做的是要知道当前的帖子是否在类别26
。只需删除get_term_children
部分 - 它解决了其他问题。你可能加了这个,因为一个分类是一个分类,这个分类是有效的,但是in_category
就足够了。
最后一件事,你不需要这样的:
$post = $wp_query->post;
这是多余的。由于您在模板中,全局变量$post
已包含您查询的帖子。
我跟着你的回答,但我仍然有空白页,我可以在哪里放'断言(“locate_template(array('singlepost-ric.php','singlepost.php'),false ,假)“);' ?另一件事是我需要属于cat 26和子类别的所有帖子都具有相同的布局 – Salvatore
只需在模板中使用'assert' - 如果'locate_template'可以找到模板,它将返回'true';否则返回'true' 。对于类别,'in_category(26)'对于属于这个类别的帖子就足够了。有关子类别,请参阅[本答案](http://wordpress.stackexchange.com/a/7615/62744)。 – vard
使用'get_template_part('single','all');'代替include(TEMPLATEPATH。'/single-all.php');'。如果我使用'get_template_part'('single','all');'不要使用'TEMPLATEPATH',这是折旧(*如果还没有折旧*) –
该页面仅显示标题而不显示内容。我有同一个文件夹中的所有single.php,single-parl.php,single-all.php和single-ric.php。 – Salvatore
如果get_template_part'找不到模板,那么'get_template_part'会自动失败,所以你可能有其他错误。激活调试模式(将_wp-config.php_中的'WP_DEBUG'常量更改为true)并查看是否显示任何错误。 – vard