如何使用自定义WP_QUERY循环显示1年前的帖子?

时间:2012-03-19 作者:m-torin

我有一个自定义的WP\\U查询循环,用于主归档页面。如何从今天开始的一年前的2天+/-内过滤自定义查询以显示帖子?

我的当前查询:

$posts_args = array( 
    \'post_type\' => \'album\',
    \'post_status\' => \'published\',
    \'paged\' => $paged,
    \'order\' => strtoupper($album_sort),
    \'orderby\' => \'date\'
);
我知道codex 列出了WP\\u查询的这个时间参数,但我从未使用过循环过滤器,对实现有点困惑。

// Create a new filtering function that will add our where clause to the query
function filter_where( $where = \'\' ) {
    // posts  30 to 60 days old
    $where .= " AND post_date >= \'" . date(\'Y-m-d\', strtotime(\'-60 days\')) . "\'" . " AND post_date <= \'" . date(\'Y-m-d\', strtotime(\'-30 days\')) . "\'";
    return $where;
}

add_filter( \'posts_where\', \'filter_where\' );
$query = new WP_Query( $query_string );
remove_filter( \'posts_where\', \'filter_where\' );
感谢您的帮助。

2 个回复
最合适的回答,由SO网友:mor7ifer 整理而成

过滤器允许您在wordpress核心使用数据时更改数据。这是wordpress如此灵活的很大一部分。

add_filter() 有两个主要参数,过滤器的挂钩和回调函数。执行过滤器时,将执行与该过滤器关联的所有回调。

当然,过滤器需要传递一些数据,然后寻找响应。此特定筛选器已打开$where, 所以这是传入的,然后在回调函数修改后返回。

$where 包含由使用的最终查询字符串的一部分WP_Queryquery() 方法被调用。通过修改此选项,您可以执行筛选,而使用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, 这很好地向你展示了你得到的东西。

SO网友:Kaaviar

本例中的add\\u filter()将在每次下一次WP\\u查询调用中向“where”子句添加内容。

remove\\u filter()将终止该筛选器。

示例中说:“为每个下一个WP\\U查询的‘where’子句添加条件”,“创建新的WP\\U查询”,“我不希望其他WP\\U查询被我的筛选器修改,所以请将其删除!”

结束

相关推荐

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

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