我有自定义单页single-ENG.php
。我想将此页面用于具有分类language=>english
的帖子。这可能吗?
答案 0 :(得分:1)
是的,这是可能的,但我认为你需要首先看一下Wordpress Template Hierarchy。
您的方法存在一些问题:
您不应将自定义页面模板命名为“single-xxxx.php”。 “单个”前缀用于单个帖子视图。这可能会混淆Wordpress并导致它只在您查看帖子类型“ENG”的单个帖子时加载模板(可能在您的主题中不存在)。
不建议将Pages作为Shell用于任何类型的Post内容。这样做的原因是你基本上绕开了Wordpress提供的现有工具,以迫使它使用自己的内置默认值做它已经可以做的事情。
为什么不创建一个taxonomy-language-english.php文件,并在主题的菜单(仪表板 - >外观 - 中设置)导航,而不是创建一个全新的页面对象来存放给定分类的帖子。 >菜单)
如果您实际上Registered your Language Taxonomy,Wordpress将自动识别新的分类模板并在其默认循环中查询所有适当的数据。
详细介绍了如何使用两种方法查询帖子。第一个是我建议使用的,只要你改变你的结构以适合作为良好练习的练习。第二个是通过将自定义模板应用于给定页面的方法。我冒昧地使用新的文件名来避免混淆Wordpress:
使用taxonomy-language-english.php
<?php
if(have_posts()) : while(have_posts()) : the_post();
echo get_the_title().'<br/>'; //Output titles of queried posts
endwhile;
else :
echo 'No posts were found'; //No posts were found
endif;
?>
使用pagelang-english.php
<?php
/**
* @package WordPress
* @subpackage MyWordpressThemeName
* Template Name: Single English
*/
$args = array('tax_query' => array(
array(
'taxonomy' => 'language',
'field' => 'slug',
'terms' => 'english'
)
));
$q = new WP_Query($args);
if($q->have_posts()) : while($q->have_posts()) : $q->the_post();
echo get_the_title().'<br/>'; //Output titles of queried posts
endwhile;
else :
echo 'No posts were found'; //No posts were found
endif;
?>
这应该足以让你入门。祝你好运。
答案 1 :(得分:1)
是的,你可以这样做。以下代码假定您的自定义分类法被称为language
,并且要检查的术语具有段english
(显然根据需要更改)。将此代码放在functions.php
文件中。
/**
* Select a custom single template
*
* @param required string $single The path to the single template
* @return string $single The updated path to the required single template
*/
function my_single_template($single){
global $wp_query, $post;
$terms = wp_get_object_terms($post->ID, 'language');
if(!empty($terms)) : foreach($terms as $term) :
if($term->slug === 'english') :
$single = sprintf('%1$s/single-ENG.php', TEMPLATEPATH);
endif
endforeach;
endif;
return $single;
}
add_filter('single_template', 'my_single_template');
修改强>
阅读@ maiorano84提供的答案后,我同意这不是最好的方法。我可以想到应该使用这种技术的情况很少,但是WP添加过滤器的事实表明他们理解可能有需要,所以你应该安全地使用它。