2015-11-03 104 views
0

我修改了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布局

+1

使用'get_template_part('single','all');'代替include(TEMPLATEPATH。'/single-all.php');'。如果我使用'get_template_part'('single','all');'不要使用'TEMPLATEPATH',这是折旧(*如果还没有折旧*) –

+0

该页面仅显示标题而不显示内容。我有同一个文件夹中的所有single.php,single-parl.php,single-all.php和single-ric.php。 – Salvatore

+0

如果get_template_part'找不到模板,那么'get_template_part'会自动失败,所以你可能有其他错误。激活调试模式(将_wp-config.php_中的'WP_DEBUG'常量更改为true)并查看是否显示任何错误。 – vard

回答

0

您的问题地址几个问题。首先,如Pieter所述,您应该使用get_template_part而不是TEMPLATEPATH作为it is deprecated

你需要做的是你的模板重命名为类似singlepost-ric.phpsinglepost-parl.phpsinglepost.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已包含您查询的帖子。

+0

我跟着你的回答,但我仍然有空白页,我可以在哪里放'断言(“locate_template(array('singlepost-ric.php','singlepost.php'),false ,假)“);' ?另一件事是我需要属于cat 26和子类别的所有帖子都具有相同的布局 – Salvatore

+0

只需在模板中使用'assert' - 如果'locate_template'可以找到模板,它将返回'true';否则返回'true' 。对于类别,'in_category(26)'对于属于这个类别的帖子就足够了。有关子类别,请参阅[本答案](http://wordpress.stackexchange.com/a/7615/62744)。 – vard

相关问题