使用主页循环将不同的模板分配给自定义帖子类型

时间:2017-09-18 作者:dezbat

我将有大约5个新网站上的自定义帖子类型。我正在寻找一种在一个(索引)页面上显示这些帖子类型的有效方法,为每个帖子指定不同的模板/样式(例如,一个帖子类型可能需要特色图片,其他可能是引号等)

This older post response 通过danblaker 看起来它在做正确的事情,而不需要为一个页面编写五个或更多的循环,但是对于WP来说,我还不太清楚如何以及在哪里应用它,或者确实,这是否仍然是可能的!

到目前为止,我可以在索引页上一次显示一个给定的帖子类型,并且可以像这样一次为这个帖子类型分配一个特定的模板-

$args = array( \'post_type\' => \'atoz_key\', \'posts_per_page\' => 10 );
$loop = new WP_Query( $args );
while ( $loop->have_posts() ) : $loop->the_post();

get_template_part( \'template-parts/atoz_key\', get_post_format() );

endwhile;
在主索引循环上方,但这样做5个以上的单独循环似乎有点愚蠢!

Dan的解决方案似乎更加优雅,但我看不出该如何具体实现!

//

非常感谢您的帮助。

谢谢

马特

1 个回复
最合适的回答,由SO网友:CodeMascot 整理而成

你最好看看你给链接的帖子上的第二个答案。使用content-{post-type}.php 为每个帖子类型命名所有模板(如果你想知道如何将模板分解为content-{post-type}.php, 那么请看一下第216个主题template-parts 目录并分析其模板体系结构)并在页面模板中按如下方式调用它们-

if ( have_posts() ) : 
    while ( have_posts() ) : the_post();    

    /**
     * Would include CPT content template (content-teams.php) if it exists
     * or content.php otherwise.
     */
    get_template_part( \'content\', get_post_type( $post ) ); 

    endwhile;
endif;
这样,您可以通过以下方式获取当前帖子的帖子类型get_post_type( $post ) 并将其分配给与帖子类型相关的内容。对于你的循环,它看起来有点像下面-

$your_post_types = array(
    \'atoz_key\',
    \'post_type_2\',
    \'post_type_3\',
    \'post_type_4\'
);

foreach($your_post_types as $p_type ) {
    $args = array(
        \'post_type\' => $p_type,
        \'posts_per_page\' => 10
    );

    $loop = new WP_Query( $args );
    while ( $loop->have_posts() ) : $loop->the_post();
        get_template_part( \'template-parts/content\', $p_type );
    endwhile;   
}

结束

相关推荐

Why does it loop twice?

我有这个循环,我不知道为什么,我有一个“加载更多”按钮,当我点击它时,它会再次加载所有文章。有人能帮忙吗?<div class=\"content\"> <div class=\"container load_more\"> <div class=\"row\"> <?php $args = array(\'category_name\' => \'actu, quizz\' );