Mostrar entradas de los últimos 7 días
Estoy tratando de mostrar las 5 entradas mejor valoradas de la última semana (7 días) en mi sitio web, sin embargo, no logro descubrir cómo mostrarlas.
Esto es lo que he logrado hasta ahora pero no parece funcionar:
<?php
// Consulta para 5 entradas de la categoría 3, ordenadas por mejor valoración
$slider_query = new WP_Query('posts_per_page=5&cat=3&orderby=highest_rated&order=desc');
?>
<?php
// Días multiplicados por segundos por día
$mylimit = 7 * 86400;
while ($slider_query->have_posts()) : $slider_query->the_post();
$post_age = date('U') - get_post_time('U');
if ($post_age < $mylimit) {
?>
//La Entrada
<?php } ?>
<?php endwhile;?>

Además de la solución de birgire, a partir de WordPress 3.7, puedes usar Parámetros de fecha.
Tus argumentos se verían así para filtrar publicaciones de los últimos 7 días:
$args = array(
'post_type' => 'post',
'post_status' => 'publish',
'orderby' => 'date',
'order' => 'DESC',
// Usando date_query para filtrar publicaciones de la última semana
'date_query' => array(
array(
'after' => '1 week ago'
)
)
);

Creo que esto debe haber sido resuelto muchas veces aquí en WordPress Answers.
También podrías revisar los ejemplos en la parte de Parámetros de tiempo en el Codex para WP_Query
.
Aquí hay dos de ellos (ligeramente modificados para tus necesidades)
Ejemplo 1:
// Crear una nueva función de filtrado que agregará nuestra cláusula where a la consulta
function filter_where( $where = '' ) {
// publicaciones en los últimos 7 días
$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' );
Ejemplo 2:
// Crear una nueva función de filtrado que agregará nuestra cláusula where a la consulta
function filter_where( $where = '' ) {
// publicaciones del 1 de mayo al 8 de marzo de 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' )
asumiendo que tienes cubierto este orderby=highest_rated
con algún plugin como describes en el comentario anterior.

Me pregunto si es mejor usar 'date_query'. Al agregar lo siguiente a los argumentos de wp_query: 'date_query' => array( array('after' => '1 week ago')

De la sección Parámetros de Tiempo en WP_Query
:
Devuelve publicaciones solo para la semana actual:
$semana = date('W');
$año = date('Y');
$consulta = new WP_Query( 'year=' . $año . '&w=' . $semana );

Hola. Aún no lo he probado, pero estoy bastante seguro de que no es exactamente lo que estoy buscando. Esto probablemente lista las publicaciones hechas en la semana 13, por ejemplo. Lo que quiero son las publicaciones que se hicieron en los últimos 7 días. Por ejemplo, desde el miércoles 8 de mayo hasta el miércoles 1 de mayo.

Funciona para mí de esta manera, para mostrar publicaciones de los últimos 7 días según el número de visitas y ordenar por el conteo de vistas de la publicación en orden DESC.
$date_range = strtotime ( '-7 day' );
$args = array(
'post_type' => 'post', // Tipo de publicación
'post_status' => 'publish', // Estado de la publicación
'posts_per_page' => '10', // Número de publicaciones por página
'meta_key' => 'post_views_count', // Clave meta para el conteo de vistas
'orderby' => 'meta_value_num', // Ordenar por valor numérico
'order' => 'DESC', // Orden descendente
'date_query' => array(
array(
'after' => array(
'year' => date('Y', $date_range ), // Año
'month' => date('m', $date_range ), // Mes
'day' => date('d', $date_range ), // Día
),
)
)
);
$query = new WP_Query( $args ); // Crear nueva consulta WP_Query

puedes usar simplemente wp_get_archives()
wp_get_archives( array( 'type' => 'weekly', 'limit' => 1, 'show_post_count' => 'true' ,'format'=>'option') ); ?>

Uso más simple de la consulta SQL con el hook de WordPress posts where
// Función para obtener fechas de inicio y fin de semana
function getStartAndEndDate($week, $year) {
$dto = new DateTime();
$dto->setISODate($year, $week);
$ret['week_start'] = $dto->format('Y-m-d');
$dto->modify('+6 days');
$ret['week_end'] = $dto->format('Y-m-d');
return $ret;
}
// Filtro para modificar la cláusula WHERE en consultas de posts
add_filter( 'posts_where', 'wpse29897_no_parents', 10, 2 );
function wpse29897_no_parents( $where, $query )
{
// Verificar si es el tipo de post 'menu_plans'
if( isset( $query->query_vars['post_type'] ) && 'menu_plans' == $query->query_vars['post_type'] )
{
if( '' != $where )
{
// Obtener fecha actual y semana
$currentdate = date('Y-m-d');
$currdate = new DateTime($currentdate);
if($_GET['weekchk']){
$currentweek = $_GET['weekchk'];
}else{
$currentweek = $currdate->format("W");
}
// Obtener rango de fechas de la semana
$week_array = getStartAndEndDate($currentweek,date('Y'));
$ws = "'".$week_array['week_start']."'";
$we = "'".$week_array['week_end']."'";
// Añadir condiciones de fecha a la cláusula WHERE
$where .= " AND post_date >= ".$ws." AND post_date < ".$we."";
}
else
{
// Fechas por defecto si no hay cláusula WHERE
$where .= " AND post_date >= '2020-07-28' AND post_date < '2020-08-4'";
}
}
return $where;
}
