问题描述

我想使用自定义帖子类型的存档作为站点的首页,这样

 http://the_site.com/

是根据我的 archive-{post-type}.php 文件显示的自定义帖子类型存档。

理想情况下,我想在 functions.php 文件中使用 is_front_page()更改查询。我尝试了以下,一个名为”Home” 的页面作为我的首页:

 add_filter('pre_get_posts', 'my_get_posts');
 function my_get_posts($query){
     global $wp_the_query;
     if(is_front_page()&&$wp_the_query===$query){
        $query->set('post_type','album');
        $query->set('posts_per_page',-1);
     }
     return $query;
 }

但首页正在返回”Home” 的内容,似乎忽略了自定义查询。

我究竟做错了什么?总的来说,有没有更好的方法呢?

最佳解决方案

将静态页面设置为主页后,您可以将其添加到您的 functions.php 中,您很好。这也将正确调用 archive-POSTTYPE.php 模板。

add_action("pre_get_posts", "custom_front_page");
function custom_front_page($wp_query){
    //Ensure this filter isn't applied to the admin area
    if(is_admin()) {
        return;
    }

    if($wp_query->get('page_id') == get_option('page_on_front')):

        $wp_query->set('post_type', 'CUSTOM POST TYPE NAME HERE');
        $wp_query->set('page_id', ''); //Empty

        //Set properties that describe the page to reflect that
        //we aren't really displaying a static page
        $wp_query->is_page = 0;
        $wp_query->is_singular = 0;
        $wp_query->is_post_type_archive = 1;
        $wp_query->is_archive = 1;

    endif;

}

次佳解决方案

Re-name 您的 CPT 档案归档到 home.php

然后使用 pre_get_posts 更改主页查询,以便只显示 CPT 的显示

function wpsites_home_page_cpt_filter($query) {
if ( !is_admin() && $query->is_main_query() && is_home() ) {
$query->set('post_type', array( 'your-cpt' ) );
    }
  }

add_action('pre_get_posts','wpsites_home_page_cpt_filter');

用您的自定义帖子类型的名称替换 your-cpt 。

参考文献

注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。