尝试显示特定日期范围的自定义帖子类型。我想仅在某个月内展示帖子。我知道我需要挂钩到posts_where过滤器,但是我无法弄清楚如何将参数传递给这个函数,因为我需要传递日期范围。
我已经看到很多关于如何更改WHERE子句以获取日期范围的示例,但仅限于静态时。我需要做以下事情:
add_filter('posts_where', 'my_custom_where', '', '04/2011'); //pass my date to the filter
function my_custom_where( $where = '' ) {
//figure range
$range = array(
'start' => $date . '-1',
'end' => $date . '-' . cal_days_in_month(CAL_GREGORIAN, date('m', $date), date('Y', $date))
);
$where .= " AND post_date ....."; //build where with date range
return $where;
}
希望这是有道理的。任何帮助将不胜感激。
答案 0 :(得分:7)
如果你求助于全局变量,你可以让它变得动态。(不理想,但是,嘿,我还没有找到更清洁的方式......)
首先为日期
定义一个全局变量$GLOBALS['start_date'] = '2011-07-31';
然后添加您的过滤器
add_filter( 'posts_where', 'filter_where' );
function filter_where( $date, $where = '' ) {
// posts later than dynamic date
$where .= " AND post_date >= '" . date('Y-m-d H:i:s', strtotime($GLOBALS['start_date'])) . "'";
return $where;
}
如果您只想为单个查询运行该过滤器,请删除过滤器。
答案 1 :(得分:3)
这应该可以在过去30天内抓住帖子。但请注意,放在您的functions.php文件或插件中的此代码将过滤您的帖子。如果您只想在某些页面上过滤,请将其包装在条件标签中,或在模板页面上使用它:
<?php
function filter_where($where = '') {
// Posts in the last 30 days
$where .= " AND post_date > '" . date('Y-m-d', strtotime('-30 days')) . "'";
return $where;
}
add_filter('posts_where', 'filter_where');
query_posts($query_string);
?>
我直接从http://wordpress.org/support/topic/show-the-posts-published-before-a-specific-date?replies=2#post-1066144窃取了这段代码,这里有更多关于这个问题的讨论,如果没有得到你想要的更多例子,还有更多的例子。
答案 2 :(得分:1)
<?php
// Show post from a theme option where posts_month is the month 1-12 and posts_year is the year (4 dig)
$month = get_option( 'posts_month' );
$year = get_option( 'posts_year' );
$query = new WP_Query( 'year=' . $year . '&monthnum=' . $month );
答案 3 :(得分:0)
如果您不想进行任何编码工作,可以使用 WordPress Posts listing plugin 帮助。借助此功能,您可以在特定日期范围之间显示帖子。
只提供开始和结束日期。您可以显示今天,当前周,上周,本月和上个月的帖子。如果预定义选项不适合您,您可以显示在过去N天内发布的帖子