当主页上的主循环显示时,将模板分配给自定义帖子类型

时间:2017-03-07 作者:Iurie

为了在主页上显示一个广告以及标准帖子,我将其添加到WordPress主循环中:

/** Add "advert" post type to the main query **/
add_action( \'pre_get_posts\', \'add_advert_post_type_to_query\' );
function add_advert_post_type_to_query( $query ) {
  if ( is_home() && $query->is_main_query() )
    $query->set( \'post_type\', array( \'post\', \'advert\' ) );
  return $query;
}
index.php 在我的主题(2017)中,我看到了loop用来显示帖子内容的模板:

        <?php
        if ( have_posts() ) :

            /* Start the Loop */
            while ( have_posts() ) : the_post();

                /*
                 * Include the Post-Format-specific template for the content.
                 * If you want to override this in a child theme, then include a file
                 * called content-___.php (where ___ is the Post Format name) and that will be used instead.
                 */
                get_template_part( \'template-parts/post/content\', get_post_format() );

            endwhile;

            the_posts_pagination( array(
                \'prev_text\' => twentyseventeen_get_svg( array( \'icon\' => \'arrow-left\' ) ) . \'<span class="screen-reader-text">\' . __( \'Previous page\', \'twentyseventeen\' ) . \'</span>\',
                \'next_text\' => \'<span class="screen-reader-text">\' . __( \'Next page\', \'twentyseventeen\' ) . \'</span>\' . twentyseventeen_get_svg( array( \'icon\' => \'arrow-right\' ) ),
                \'before_page_number\' => \'<span class="meta-nav screen-reader-text">\' . __( \'Page\', \'twentyseventeen\' ) . \' </span>\',
            ) );

        else :

            get_template_part( \'template-parts/post/content\', \'none\' );

        endif;
        ?>
在该模板中(template-parts/post/content) 我发现它仅用于post类型:

        if ( \'post\' === get_post_type() ) :
            echo \'<div class="entry-meta">\';
                if ( is_single() ) :
                    twentyseventeen_posted_on();
                else :
                    echo twentyseventeen_time_link();
                    twentyseventeen_edit_link();
                endif;
            echo \'</div><!-- .entry-meta -->\';
        endif;
所以,我不明白用什么模板来显示我的自定义帖子类型?与此相关,我有一个问题:a) 如何“强制”主循环对自定义帖子类型使用与帖子类型相同的模板和/或b) 当主页上的主循环显示时,如何将自定义模板分配给我的自定义帖子类型?

UPDATE

可以this 如何使用?

function get_template_part_custom($content_name) {
     global $post;
     //its paper type?
     if ($post->post_type == \'paper\') {
         //get template-parts/content-paper.php
         get_template_part( \'template-parts/content\', $content_name );
     }else{
         //fallback to the default
         get_template_part( \'template-parts/content\', get_post_format($post) );
     }
}

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

您正在检查的源代码TwentySeventeen\'s content.php 有选择地。如果是普通帖子,您引用的行仅是关于打印发布时间的。无论文章类型如何,都会直接在您的行下方打印文章/页面标题。

关于a)您不需要强制任何内容,因为只要此帖子类型没有特定模板,WP将使用默认的帖子模板。

关于b)您必须在子主题中处理此问题,因为这意味着要扩展功能。您将修改content.php 包括对文章类型的额外测试,并包括该测试的格式。如果你想在插件中处理这个问题,那么你在更新中提供的链接包含一个很好的线索。

相关推荐

Generating a perfect loop

所以我现在已经在这里坐了大约三个小时了,我不得不让这件事过去几个小时来好好睡一觉,同时我希望能得到你的帮助。我已经能够使用$wpdb->get\\u results从数据库中获取内容,并且能够将它们放入一个数组中,但是我想使用这些信息在循环中运行一个新的查询,以获取列表中的多个项目。我使用了本指南的一个变体https://stackoverflow.com/questions/45848249/woocommerce-get-all-orders-for-a-product 获取订单ID。现在,我已