我的博客中有不同的自定义帖子类型
我还为其中的每一个都提供了自定义模板,如loop-{$cpt-name}.php
我希望根据当前循环中的自定义帖子类型,在搜索结果中动态包含不同的cpt模板。我正在尝试这样做(search.php):
<?php
while ( have_posts() ) : the_post();
if ( get_post_type ( $post->ID ) == \'teams\' ) {
get_template_part( \'loop\', \'teams\' );
} elseif ( get_post_type ( $post->ID ) == \'players\' ) {
get_template_part( \'loop\', \'players\' );
} else {
get_template_part( \'loop\', \'search\' );
}
endwhile;
?>
然而,问题是,当我尝试这样做时,查询中有不定式循环。因为在
search.php 文件我在
while loop 并在我还有while语句的地方包括模板(我需要在那里)。我的CPT模板示例(开头):
<?php
/**
* The loop that displays teams
*
*/
if ( have_posts() ) while ( have_posts() ) : the_post();
我想到了对循环中找到的每个帖子进行额外查询的想法,如下所示:
while ( have_posts() ) : the_post();
if ( get_post_type ( $post->ID ) == \'teams\' ) {
query_posts(\'p=\'.$post->ID);
get_template_part( \'loop\', \'teams\' );
wp_reset_query();
但我想这会让搜索速度慢下来。(尚未测试)
如有任何建议,将不胜感激。
SO网友:danblaker
您最好只执行一个查询,但这需要对自定义的post类型循环进行一些重新设计。基本上,您可以将表示代码从循环中移到新文件中(我们称之为“partials”)。而不是loop-{$cpt-name}.php, 你会有一个文件partial-{$cpt-name}.php.
而不是从search.php, 你会登记的loop-search.php 如果存在适当的partials,则将其包括在内,如下所示:
<?php
while ( have_posts() ) : the_post();
$cpt = $post->post_type;
$partial = "partial-{$cpt}.php";
if ( locate_template( $partial )
{
include( locate_template( $partial ) );
}
else
{
?>
<div>Default Search loop output here for non-CPT posts</div>
<?php
}
endwhile;
?>
您可以在常规循环中执行相同的操作,而不是对每个自定义帖子类型使用单独的循环。如果您想继续使用单独的循环,您应该导入这些CPT循环中的部分,而不是指定表示代码。