0

这个问题只适用于创世纪框架。

我有一个名为“新闻”的类别。在我的“新闻”类别页面上,我只想显示过去 30 天内发布的帖子。

这是我开始使用的代码:

<?php

remove_action('genesis_loop', 'genesis_do_loop');
add_action('genesis_loop', 'pm_recent_news_loop');

function pm_last_name_loop() {
global $query_args;
$args = (array(
   //????
));

genesis_custom_loop( wp_parse_args($query_args, $args) );

}
genesis();

在一般的 WordPress API 文档中,它基本上说您无法通过将参数传递给 $query_args 来实现按日期范围过滤(这是 genesis_custom_loop 完成它的方式。相反,似乎正确的方法是add_filter('posts_where', 'my_where_filter') 然后通过 post_date 定义 where 子句。参考: http ://codex.wordpress.org/Class_Reference/WP_Query#Parameters 。

但是我无法让它工作。当我尝试实现类似于 codex 中描述的代码时,我要么没有收到任何帖子,要么收到所有帖子。我认为这是因为 Genesis 以某种方式围绕 posts_where 过滤器工作,或者以不被调用的方式包装它。

4

1 回答 1

1

尝试使用一些 SQL 添加过滤器

filter_daterange($where='') {
$where .= " AND post_date >= '".date('Y-m-d H:i:s', strtotime('-30 days'))."' AND post_date <= '".date('Y-m-d H:i:s')."'";
return $where;
}

在循环之前添加过滤器,然后将其删除

add_filter( 'posts_where', 'filter_daterange' );
genesis_custom_loop( wp_parse_args($query_args, $args) );
remove_filter( 'posts_where', 'filter_daterange' );
于 2013-07-08T14:26:14.560 回答