Showing posts between a certain date range

2019-06-28 08:45发布

Trying to display my custom post types for specific date ranges. I want to show posts only within a certain month. I know I need to hook into the posts_where filter, but I can not figure out how to pass arguments to this function, as I need to pass the date range.

I have seen plenty of examples of how to alter the WHERE clause to take a date range, but only when static. I need to do the following:

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;

}

Hope that makes sense. Any help would be appreciated.

4条回答
来,给爷笑一个
2楼-- · 2019-06-28 09:03

If you not want to do any coding work then it is possible with the help WordPress Posts listing plugin .With help of this you can Display Posts between a certain date range.

Just provide Start and End Date. You can display today, current week, last week, this month and last month posts. You can display posts published in last N Days, if the predefined options are not suitable for you

查看更多
够拽才男人
3楼-- · 2019-06-28 09:10

You can make it dynamic if you resort to global variables.(Not ideal, but hey, I haven't found a cleaner way...)

First define a global variable for the date

$GLOBALS['start_date'] = '2011-07-31';

then add your filter

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;
}

Then remove the filter if you just want to run that for a single query.

查看更多
Juvenile、少年°
4楼-- · 2019-06-28 09:14

This should do the trick to grab posts in the last 30 days. Beware, however, that this code, placed in your functions.php file, or in a plugin will filter your posts EVERYWHERE. If you only want it to filter on some pages, either wrap it in conditional tags, or use it on a template page:

<?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);
?>

I stole this code directly from: http://wordpress.org/support/topic/show-the-posts-published-before-a-specific-date?replies=2#post-1066144, where there is a bigger discussion of this issue and there are more examples if this doesn't get exactly what you wanted.

查看更多
地球回转人心会变
5楼-- · 2019-06-28 09:15
<?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 );
查看更多
登录 后发表回答