从wp_查询中断最近发布的小部件中排除类别

时间:2011-10-05 作者:MattR

下午好

在我的主题中,我有两个单独的博客页面。主要博客页面“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,
我希望有人能帮助我理解为什么会发生这种情况,或者可能是如何解决它。感谢您的时间和关注,非常感谢。

马特

2 个回复
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();
TheWP_Query 如果您仍然被卡住,codex上的页面会有大量优秀的代码片段。

我还要补充一点,如果你故意使用$wp_query 要覆盖主页查询,应改为使用query_posts(), 或者更好的是pre_get_posts

SO网友:andresmijares

这真的很奇怪,我会从基础开始,也许查询是携带其他内容,尝试添加

  <?php wp_reset_query() ?>
然后查看显示的内容。

结束

相关推荐

Multi-site or categories?

我最近为一所大学的广播电台重新设计了一个网站,从Drupal切换到Wordpress。该网站基于广播电台,但每个专业节目也会有自己的博客。然而,我希望从主要内容到每个博客的布局都是一样的。分类或多或少会起作用,但当我想要博客的信息页面时,事情就变得棘手了,比如“关于”之类的。假设我有一个“现场”节目。我希望所有内容都是/live/page或/live/2011/06/post标题,但Wordpress只想发布帖子,我还没有找到任何可靠的permalink插件。我应该坚持使用类别吗?我怎样才能改善这种情况?