Display posts of the last 7 days
-
23-04-2021 - |
Question
I'm trying to display the 5 best rated posts of the last week (7 days) on my website, however I can't seem to figure out how to display them.
Here's what I've achieved so far but it doesn't seem to work:
<?php $slider_query = new WP_Query('posts_per_page=5&cat=3&orderby=highest_rated&order=desc'); ?>
<?php
$mylimit = 7 * 86400; //days * seconds per day
while ($slider_query->have_posts()) : $slider_query->the_post();
$post_age = date('U') - get_post_time('U');
if ($post_age < $mylimit) {
?>
//The Post
<?php } ?>
<?php endwhile;?>
Solution
In addition to birgire's solution, as of WordPress 3.7, you can use Date parameters.
Your arguments would look like this to filter posts from the last 7 days:
$args = array(
'post_type' => 'post',
'post_status' => 'publish',
'orderby' => 'date',
'order' => 'DESC',
// Using the date_query to filter posts from last week
'date_query' => array(
array(
'after' => '1 week ago'
)
)
);
OTHER TIPS
I think this must have been solved many times here on WordPress Answers.
You could also check out the examples in the Time parameters part in Codex for WP_Query
.
Here are two of them (slightly modified to your needs)
Example 1:
// Create a new filtering function that will add our where clause to the query
function filter_where( $where = '' ) {
// posts in the last 7 days
$where .= " AND post_date > '" . date('Y-m-d', strtotime('-7 days')) . "'";
return $where;
}
add_filter( 'posts_where', 'filter_where' );
$slider_query = new WP_Query('posts_per_page=5&cat=3&orderby=highest_rated&order=desc');
remove_filter( 'posts_where', 'filter_where' );
Example 2:
// Create a new filtering function that will add our where clause to the query
function filter_where( $where = '' ) {
// posts for May 1 to March 8, 2013
$where .= " AND post_date >= '2013-05-01' AND post_date < '2013-05-8'";
return $where;
}
add_filter( 'posts_where', 'filter_where' );
$slider_query = new WP_Query('posts_per_page=5&cat=3&orderby=highest_rated&order=desc');
remove_filter( 'posts_where', 'filter_where' )
assuming that you have this orderby=highest_rated
covered with some plugin as you describe in the comment above.
From the WP_Query
Time Parameters section:
Returns posts for just the current week:
$week = date('W');
$year = date('Y');
$query = new WP_Query( 'year=' . $year . '&w=' . $week );
Working for me like this, to show post from last 7 days according to the number of views and order by post views count DESC.
$date_range = strtotime ( '-7 day' );
$args = array(
'post_type' => 'post',
'post_status' => 'publish',
'posts_per_page' => '10',
'meta_key' => 'post_views_count',
'orderby' => 'meta_value_num',
'order' => 'DESC',
'date_query' => array(
array(
'after' => array(
'year' => date('Y', $date_range ),
'month' => date('m', $date_range ),
'day' => date('d', $date_range ),
),
)
)
);
$query = new WP_Query( $args );
you can simply use wp_get_archives()
wp_get_archives( array( 'type' => 'weekly', 'limit' => 1, 'show_post_count' => 'true' ,'format'=>'option') ); ?>