Pre_get_post和博客页面

时间:2014-09-06 作者:Jamie

我正试图以一种恰当的方式设置我的新主题。我为我的新主题创建了一个名为“template home.php”的自定义主页,然后创建了一个“blog”页面。我转到“设置”,将“阅读”设置更改为“静态页面”,将首页设置为主页模板,然后将“帖子页面”设置为“博客”。我没有为该页面分配自定义模板。据我所知,指数。php文件将用于获取这些帖子。我一直在尝试使用is_page()is_category() 如果是博客页面,那么就获取博客帖子。我的希望是,当第一次打开主题时,所有帖子都会显示在首页上,但如果我访问了博客页面,条件将生效,只会得到博客页面上的帖子。我想我可以通过使用此代码来完成此任务

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

function blog_query( $query ){
    if ( $query->is_page(\'blog\') ) {
    $query->set( \'category_name\', \'blog\' );
   }    
}
这是行不通的。这让我在头版“尝试获取非对象的属性”上出现了一个错误,我只是不确定使用哪种方法来设置博客页面。我应该为它设置一个自定义模板,让索引页获取所有帖子,还是尝试使用pre_get_posts?

感谢您的意见。

2 个回复
SO网友:Pieter Goosen

您的博客页面实际上是您的主页,因此您需要使用is_home(). 对于静态frontpage,is_front_page() 将使用

EDIT

很抱歉让人困惑:-)。这是设置静态frontpage时的工作方式

设置为frontpage的页面实际上只是一个封面。当你想到一本书时,这一页将告诉读者这本书的全部内容。此处使用的页面将是您设置的自定义页面模板。正确的名字应该出现在头版。php,但任何页面模板都可以。此处使用的适当条件标记为is_front_page()

现在,blogpage,无论是否明确设置,都将使用home。php,如果不可用,将使用索引。php。没有多少人知道这一点,但这被视为您网站的主页,当没有设置静态frontpage时,您将看到的普通索引页。要定位您的博客页面,您需要使用is_home() 条件检查。奇怪但真实

要将博客页面限制为一个类别,请使用pre_get_posts 正如您所做的,只需更改您的条件标记accordingle

function only_one_cat_blogpage($query) {
    if( !is_admin() && $query->is_home() && $query->is_main_query() ){
        $query->set( \'cat\', \'ID OF CATEGORY\' );
    }
}
add_action( \'pre_get_posts\', \'only_one_cat_blogpage\' );

EDIT 2

要进一步阅读,请查看

SO网友:Robert hue

试试这个。正如Pieter所说,您必须检查is_home() 并相应地设置条件。

function show_category_posts( $query ) {
    if ( $query->is_home() && $query->is_main_query() ) {
        $query->set( \'category_name\', \'blog\' );
    }
}
add_action( \'pre_get_posts\', \'show_category_posts\' );

结束

相关推荐