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

标签 php wordpress

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

 http://the_site.com/

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

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

 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”的内容,似乎忽略了自定义查询。

我做错了什么?一般来说,有没有更好的方法来解决这个问题?

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

最佳答案

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

Isaac 通过 functions.php 添加了一个过滤器,走在了正确的轨道上.他做错的是打电话is_front_page() ,这还行不通,因为我们在 pre_get_posts并且查询还没有被执行。

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

(有关所有 WordPress 选项的概述,只需在浏览器中访问 <yourwordpressinstallation>/wp-admin/options.php。)

这导致以下解决方案 as suggested by 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", "");

    }
}

您可能需要更改一些条件标签以确保所有插件仍然有效,具体取决于查询更改的严重程度。

希望这对某人有帮助。

更新:如前所述below , 添加 !is_admin()if -statement 以确保函数仅在前端运行。如果您只想为初始查询运行此操作,您还可以添加主查询检查 $wp_query->is_main_query() .

关于php - 如何在 WordPress 中使用自定义帖子类型存档作为首页?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7734647/

相关文章:

html - 为什么 WordPress 向我的 &lt;input&gt; 标签(空元素)添加结束标签?

php - PHP 的 file_get_contents 内存和数据效率高吗?

php - 在 wordpress 中使用 meta_query 和默认字段

javascript - 将选择下拉列表更改为复选框

php - PHP和MySQL:mysqli_num_rows()期望参数1为mysqli_result,给定 bool 值

html - 不同的页面模板在 WordPress 中不显示内容

ajax - Wordpress 创建类别 AJAX 响应

javascript - WordPress 自定义插件发布被拒绝的原因 'Calling core loading files directly'

php - Ajax 程序没有按我的预期运行

javascript - 如何删除融合 Angular 仪表图表中的背景颜色