下午好
在我的主题中,我有两个单独的博客页面。主要博客页面“news.php”包含我们标准的新闻、想法、事件类型的帖子。第二个博客“questions.php”只包含“提问”类别的博客帖子。在我的侧边栏中,我包含了默认的“最近的帖子”小部件。
在主博客页面上,按照这样的方式设置查询,以排除“提问”类别:
$args = array (
\'posts_per_page\' => 7,
\'cat\' => -16,
\'paged\' => $paged,
);
$wp_query = new WP_Query( $args );
在Ask a Question blog页面上,查询设置如下,仅显示“Ask a Question”类别:
$args = array (
\'posts_per_page\' => 7,
\'cat\' => 16,
\'paged\' => $paged,
);
$wp_query = new WP_Query( $args );
在使用“最近的帖子”小部件之前,一切似乎都很好。在标准新闻页面中,小部件显示得很好,显示了博客帖子的正确列表。然而,在“提问”页面上,小部件显示页面和帖子,其中一些不存在。例如,列表中有:
又一个测试站?我想是的如果我从问题中注释掉类别列表。php在查询中,一切正常。因此,导致问题的原因是:
\'cat\' => 16,
我希望有人能帮助我理解为什么会发生这种情况,或者可能是如何解决它。感谢您的时间和关注,非常感谢。
马特
SO网友:mrwweb
这个$wp_query
对象用于存储主页查询,因此在使用
$wp_query = new WP_Query( $args );
您正在清除默认值。因此
wp_reset_query()
没有要重置的内容。
要解决此问题,请使用其他名称保存自定义查询对象,可能$mr_custom_query
, 然后在循环时,使用以下格式:
if( $mr_custom_query->have_posts() ) : while( $mr_custom_query->have_posts() ) : $mr_custom_query-> the_post();
The
WP_Query 如果您仍然被卡住,codex上的页面会有大量优秀的代码片段。
我还要补充一点,如果你故意使用$wp_query
要覆盖主页查询,应改为使用query_posts()
, 或者更好的是pre_get_posts
钩