问题
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