将QUERY_POST替换为PRE_GET_POST

时间:2013-04-26 作者:Villalobos

我有一个静态首页,检查用户是否已登录,以及他/她是否在某个特定类别中显示多个帖子。为此,我使用了以下代码:

query_posts(\'cat=2&showposts=5\'.\'&orderby=date&order=desc\');
while (have_posts()) : the_post();
the_content();
endwhile;
现在我发现这不适合使用query_post 我应该使用pre_get_posts 相反我尝试过这样做,但不知何故,我的页面出现故障,说我的服务器配置不正确。

1 个回复
最合适的回答,由SO网友:s_ha_dum 整理而成

如果看不到损坏的代码,很难说,但您的过滤器应该是这样的:

function pregp_wpse_97354($qry) {
  if (is_front_page() && is_main_query() && is_user_logged_in()) {
    $qry->set(\'cat\',2);
    $qry->set(\'posts_per_page\',5);
    $qry->set(\'orderby\',\'date\');
    $qry->set(\'order\',\'DESC\');
  }
}
add_action(\'pre_get_posts\',\'pregp_wpse_97354\');
您提到了一些关于用户登录的信息,您的代码没有检查这些信息,但我将其加入了。这将在加载主题模板之前运行,因此如果这是以登录用户为条件的,则需要在过滤器回调中包含该检查。

结束

相关推荐