显示特定日期范围之间的帖子

时间:2011-04-26 04:15:21

标签: wordpress arguments archive custom-post-type add-filter

尝试显示特定日期范围的自定义帖子类型。我想仅在某个月内展示帖子。我知道我需要挂钩到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;

}

希望这是有道理的。任何帮助将不胜感激。

4 个答案:

答案 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天内发布的帖子