在插件中修改wordpress查询的正确方法是什么?

时间:2009-08-21 17:25:06

标签: wordpress plugins global

基本上我正在使用一个插件,允许在存档页面上使用日期过时的帖子。我的问题比这个特定功能更广泛,但每个人都喜欢某些背景。

我对许多插件开发概念有所了解,但必须遗漏一些非常基本的东西。

我可以成功地重写一个查询,它给出了我想要的结果:

function modify_where( $where ) {
  global $wp_query;
    // define $year, $cat, etc
  if( is_archive() ) {
    $where = "  AND YEAR(wp_posts.post_date)='".$year."' AND wp_term_taxonomy.taxonomy = 'category' AND wp_term_taxonomy.term_id IN ('".$cat."') AND wp_posts.post_type = 'post' AND (wp_posts.post_status = 'publish' OR wp_posts.post_status = 'future')";
  }
  return $where;
}

add_filter('posts_where', 'catCal_where' );

但是,如果我尝试在主循环之后创建新的WP _ Query('different_query_stuff'),则新查询将使用上面概述的相同WHERE语句。

问题是:我错过了什么?

感谢。

2 个答案:

答案 0 :(得分:0)

只是一个猜测,因为我不是WP专家,但也许rewind_posts来自Function Reference WP_Query

rewind_posts()
Resets $current_post and $post.

答案 1 :(得分:0)

您可能想要做的是在wp操作中删除该过滤器。在wp,add_action('wp','my_remove_filter_action',999)中添加一个操作,并让'my_remove_filter_action'删除您在查询中放置的过滤器,以便它影响页面查询,然后对页面的其余部分呈现惰性负荷。

您可能能够找到一些早于WP的其他过滤器来删除过滤器。您基本上只想尝试将该查询限制为主页查询。