Showing posts between a certain date range

依然范特西╮ 提交于 2019-12-23 12:28:27

问题


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.


回答1:


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.




回答2:


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.




回答3:


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



回答4:


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



来源:https://stackoverflow.com/questions/5785857/showing-posts-between-a-certain-date-range

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!