Mostrar entradas de los últimos 7 días

13 may 2013, 15:48:27
Vistas: 27.7K
Votos: 9

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;?>
2
Comentarios

Ten en cuenta que orderby=highest_rated no está integrado en WordPress. ¿Estás usando algún plugin para las valoraciones?

RRikesh RRikesh
13 may 2013 16:07:24

¡Sí, estoy usando un plugin para esto! Gracias por tu preocupación.

Swen Swen
13 may 2013 16:25:06
Todas las respuestas a la pregunta 6
2
27

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'
        )
    )
);
27 nov 2014 17:34:37
Comentarios

Este debería ser el enfoque a partir de la versión 3.7 :-)

Pieter Goosen Pieter Goosen
27 nov 2014 17:41:16

Esto es bueno, pero obtiene publicaciones exactamente de hace 24*7 horas. Por ejemplo, si actualmente es de noche, no recuperará las publicaciones que se publicaron hace 7 días por la mañana.

karlosuccess karlosuccess
3 mar 2023 07:23:20
2

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.

13 may 2013 16:47:54
Comentarios

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')

Christine Cooper Christine Cooper
26 nov 2014 18:12:49

Sí, ese sería ahora el método preferido, ya que la respuesta fue escrita antes de la existencia del parámetro date_query ;-) @ChristineCooper

birgire birgire
27 nov 2014 18:13:00
1

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 );
13 may 2013 16:03:38
Comentarios

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.

Swen Swen
13 may 2013 16:27:50
0

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
28 feb 2018 15:21:41
0

puedes usar simplemente wp_get_archives()

 wp_get_archives( array( 'type' => 'weekly', 'limit' => 1, 'show_post_count' => 'true' ,'format'=>'option') ); ?>
20 dic 2020 11:14:28
0

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;
}
5 ago 2021 16:08:53