如何在首页上放置自定义帖子类型

时间:2016-10-12 作者:Xero1

我正在尝试使用WordPress创建一个公文包,使用自定义的帖子类型来显示我的项目。我想在静态首页上显示的每个项目都有一个特征图像作为缩略图,单击缩略图可以直接进入该项目。

如何将自定义帖子类型发布到静态首页?我只想显示最新的6篇帖子,然后我会通过导航找到其余的链接。

3 个回复
最合适的回答,由SO网友:Andy Macaulay-Brook 整理而成

所以如果你注册了一个CPTwpse_242473_custom_post_type 您可以使用它将6篇此类最新帖子放在静态首页(或任何地方)。您可以使用短代码或模板标记,该函数应该可以同时用于这两种情况。

这是对我在许多网站上使用的一些代码的修改。把它放在你的主题中functions.php. 当然,请修改我使用的HTML以适合您自己。

我已经添加了一个扭曲,我一直想尝试一段时间,所以如果它窒息你让我知道,我会测试它正确。我所添加的是一整套可选参数,我希望它们可以让同一个函数同时用于短代码和模板标记。你可以[recentposts] 在任何页面上的可视化编辑器中,或者<?php wpse_242473_recent_posts(); ?> 进入主题的任何模板。

要将其放入静态首页的模板中,请编辑(或创建)模板front-page.php. 这将自动为静态首页选择,而无需在页面编辑屏幕中选择。

function wpse_242473_recent_posts( $atts = null, $content = null, $tag = null ) {

    $out = \'\';

    $args = array( 
        \'numberposts\' => \'6\', 
        \'post_status\' => \'publish\', 
        \'post_type\' => \'wpse_242473_custom_post_type\' ,
    );

    $recent = wp_get_recent_posts( $args );

    if ( $recent ) {

        $out .= \'<section class="overview">\';

        $out .= \'<h1>Recent Projects</h1>\';

        $out .= \'<div class="overview">\';

        foreach ( $recent as $item ) {

            $out .= \'<a href="\' . get_permalink( $item[\'ID\'] ) . \'">\';
            $out .= get_the_post_thumbnail( $item[\'ID\'] ); 
            $out .= \'</a>\';
        }

        $out .= \'</div></section>\';
    }

    if ( $tag ) {
        return $out;
    } else {
        echo $out;
    }

}

add_shortcode( \'recentposts\', \'wpse_242473_recent_posts\' );
这是对你想要的帖子的直接检索。

这个foreach 循环构建HTML,然后如果使用了短代码,则最后的条件返回HTML,如果将函数作为模板标记调用,则返回HTML。

web上的许多文章没有向您展示的是传递给所有短代码处理程序的第三个参数。使用短代码时,它包含短代码名称,因此处理程序理论上可以处理多个短代码。在本例中,我们使用它来判断函数是否确实被作为短代码处理程序调用。

SO网友:Andy Macaulay-Brook

Edit: This answer was written before I realised the OP has a static front page. 我把它放在这里,以防对其他人有用,并为静态头版案例添加了第二个答案。

这将向主页主循环添加自定义帖子类型:

add_action( \'pre_get_posts\', \'wpse_242473_add_post_type_to_home\' );

function wpse_242473_add_post_type_to_home( $query ) {

    if( $query->is_main_query() && $query->is_home() ) {
        $query->set( \'post_type\', array( \'post\', \'your_custom_post_type_here\') );
    }
}
正在检查is_home 确保我们在主博客“主页”上is_main_query 确保我们不会无意中影响任何辅助循环。

如果您只需要自定义帖子类型,而不需要普通帖子,请删除post 从post类型数组中。

web上有一些不正确的文章将此操作视为筛选器。不是,它通过引用传递查询,以便您可以直接设置查询参数。

SO网友:bdtheme

您可以按照以下步骤操作:
1)创建您的CPT(自定义帖子类型)模板
2)在该模板中放置以下代码;用您的CPT替换CPT
3)从右侧选择此模板,打开新页面并发布新页面
4)最后,转到设置,然后单击阅读,然后选择静态页面下的首页。

代码:

<?php
/**
 *Template Name:CPT
 * @package CPT 
 * @since CPT  1.0
 */ 
get_header(); 

global $paged;  
    if( get_query_var( \'paged\' ) ) {
        $paged = get_query_var( \'paged\' );
    } elseif( get_query_var( \'page\' ) ) {
        $paged = get_query_var( \'page\' );
    } else {
        $paged = 1;
    }

    $args = array(
        \'post_type\'     => \'CPT\',
        \'posts_per_page\'=>6,
        \'paged\'         => $paged,
    );

    $query = new WP_Query($args);
?>

<?php if ( $blog_query->have_posts() ) : ?>
                            <?php while ( $query->have_posts() ) : $query->the_post(); ?>
                                <div class="post-thumbnail">
                                      <?php if (  (function_exists(\'has_post_thumbnail\')) && (has_post_thumbnail())  ) {?>
                                          <a href="<?php the_permalink(); ?>" title="<?php the_title_attribute(); ?>">
                                           <?php the_post_thumbnail(); ?>  
                                          </a>
                                        <?php }
                                      ?>
                                </div>

                            <?php endwhile; ?>
<?php endif; ?>

<?php get_footer(); ?>