问题描述
我想使用自定义帖子类型的存档作为站点的首页,这样
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 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。