如何在WordPress中使用自定义帖子类型存档作为首页?

Isa*_*bow 2 php wordpress

我想使用自定义帖子类型存档作为网站的首页,以便

 http://the_site.com/
Run Code Online (Sandbox Code Playgroud)

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

理想情况下,我想is_front_page()在我的functions.php文件中使用更改查询.我尝试了以下操作,将一个名为"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;
 }
Run Code Online (Sandbox Code Playgroud)

但首页返回"Home"的内容,似乎忽略了自定义查询.

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

注意:我确实在WordPress Answers中发布了这个,但该社区相对较小.

Rob*_*ert 8

将最终解决方案作为答案发布(Isaac将其作为评论)仅供所有仍在寻找的人使用.

Isaac在正确的轨道上添加了过滤器functions.php.他做错了是调用is_front_page(),因为我们已经进入pre_get_posts并且查询尚未执行,因此无法正常工作.

但是,我们确实拥有当前页面ID.所以我们仍然可以通过查看一个名为的选项的WordPress选项寄存器来解决这个问题,该选项page_on_front返回用户设置为首页的页面的ID.

(有关所有WordPress选项的概述,请访问<yourwordpressinstallation>/wp-admin/options.php您的浏览器.)

这构成了Ijaas建议的以下解决方案:

add_action("pre_get_posts", "custom_front_page");
function custom_front_page($wp_query) {
    // Compare queried page ID to front page ID.
    if(!is_admin() && $wp_query->get("page_id") == get_option("page_on_front")) {

        // Set custom parameters (values based on Isaacs question).
        $wp_query->set("post_type", "album");
        $wp_query->set("posts_per_page", -1);

        // WP_Query shouldn't actually fetch the page in our case.
        $wp_query->set("page_id", "");

    }
}
Run Code Online (Sandbox Code Playgroud)

您可能必须更改一些条件标记以确保所有插件仍然有效,具体取决于查询的更改程度.

希望这有助于某人.

更新:如注意以下,添加!is_admin()if语句来确保该功能只能运行在前端.如果您只想为初始查询运行此操作,则还可以添加主查询检查$wp_query->is_main_query().