仅通过修改我的查询的WHERE子句来显示帖子

时间:2012-08-10 作者:Amna Ahmed

我试图显示7天以前的帖子。为此,我需要修改代码中的where子句

//Hack found on the bottom of http://codex.wordpress.org/Template_Tags/query_posts
   function filter_where($where = \'\') {
        //posts in the last 7 days
    $where .= " AND post_date > \'" . date(\'Y-m-d\', strtotime(\'-7 days\')) . "\'";
    }
     (\'posts_where\', \'filter_where\');
   query_posts($query_string);
   if ( have_posts() ) : while ( have_posts() ) : the_post();
      ... and the usual
但是这样做会修改所有的查询,我只想在插件中使用这个查询,我不想更改我网站上的任何其他查询。我该怎么做?

1 个回复
SO网友:Tom Auger

如果要在where子句上添加筛选器,那么只需确保使用remove\\u filter()和完全相同的签名将其删除immediately after 您可以创建查询。

在您的示例中,您使用的是query\\u posts(),因此请添加过滤器,运行查询,然后立即删除过滤器。

add_filter( \'posts_where\', \'my_posts_where_filter\', 10, 2 );
query_posts( $query_string );
remove_filter( \'posts_where\', \'my_posts_where_filter\', 10, 2 );
需要注意的是,当您使用2参数版本时,第二个参数在限制过滤器仅影响您感兴趣的查询方面非常有用。

add_filter( \'posts_where\', \'my_posts_where_filter\', 10, 2 );
function my_posts_where_filter( $where_clause, $query_object ){
  // check conditions on your query object...

  // ... then manipulate your $where_clause accordingly
  return $where_clause;
}
如果这样做,您可能完全可以省去remove\\u filter()。

此外,您可能不需要query_posts() 当你这样做的时候,我也是。如果你已经在胡闹get_posts() 过滤器,在每个查询上运行,并在另一个查询中添加query_posts() 只会减慢你的博客加载时间。

因此,找到一种方法来识别您所在的页面(使用print_r() 看看它有什么好处,或者使用条件likeis_main_query() 等),然后包装您的附加WHERE 大ol’内的条件if{ } 块设置过滤器不是从您所在的页面模板,而是从您的functions.php, 或者一些包含的类。当然还有test, test, test 确保您不会影响站点的其他页面、某些小部件、RSS提要或管理后端。

结束

相关推荐

使用新的WP-Query()从循环中过滤后期格式;

嗨,我目前正在为我的博客构建一个主题。下面的代码指向最新的帖子(特色帖子)。因为这将有一个不同的风格比所有其他职位。然而我想过滤掉帖子格式:链接使用我在循环中定义的WP查询,因为它给我带来了更多的灵活性。我该怎么做呢? <?php $featured = new WP_Query(); $featured->query(\'showposts=1\'); ?> <?php while ($featured->have_post