过滤器允许您在wordpress核心使用数据时更改数据。这是wordpress如此灵活的很大一部分。
add_filter()
有两个主要参数,过滤器的挂钩和回调函数。执行过滤器时,将执行与该过滤器关联的所有回调。
当然,过滤器需要传递一些数据,然后寻找响应。此特定筛选器已打开$where
, 所以这是传入的,然后在回调函数修改后返回。
$where
包含由使用的最终查询字符串的一部分WP_Query
当query()
方法被调用。通过修改此选项,您可以执行筛选,而使用WP_Query
本身(如高级日期过滤)。
在你的情况下,你要做的是这样的:
function wpse46066_filter_where( $where = \'\' ) {
// posts 30 to 60 days old
$where .= " AND post_date >= \'" . date(\'Y-m-d\', strtotime(\'-1 year -2 days\')) . "\'" .
" AND post_date <= \'" . date(\'Y-m-d\', strtotime(\'-1 year 2 days\')) . "\'";
return $where;
}
add_filter( \'posts_where\', \'wpse46066_filter_where\' );
$query = new WP_Query( $post_args );
remove_filter( \'posts_where\', \'wpse46066_filter_where\' );
您会注意到,实际上根本没有更改查询参数,这是因为过滤器的操作独立于输入
WP_Query
正在从这些args接收。您还将注意到过滤器已添加,然后应用(通过调用
WP_Query
), 然后移除。这可以防止所有查询具有与此查询相同的时间限制。
关于的注释strtotime()
: 如果使用多个值,则必须对每个值求反。-1 year 2 days
(假设没有闰年)变为363天,而不是367天。如果你想玩这个,你可以使用this utility, 这很好地向你展示了你得到的东西。