Afișarea articolelor din ultimele 7 zile

13 mai 2013, 15:48:27
Vizualizări: 27.7K
Voturi: 9

Încerc să afișez cele 5 articole cel mai bine cotate din ultima săptămână (7 zile) pe site-ul meu, dar nu reușesc să găsesc modalitatea corectă de a le afișa.

Iată ce am realizat până acum, dar nu pare să funcționeze:

<?php 
// Interogare pentru 5 articole din categoria 3, ordonate după rating
$slider_query = new WP_Query('posts_per_page=5&cat=3&orderby=highest_rated&order=desc'); ?>

<?php
// Calculăm limita de 7 zile în secunde
$mylimit = 7 * 86400; //zile * secunde pe zi

while ($slider_query->have_posts()) : $slider_query->the_post();

    // Calculăm vârsta articolului
    $post_age = date('U') - get_post_time('U');

    // Verificăm dacă articolul este mai recent de 7 zile
    if ($post_age < $mylimit) { 
?>

//Articolul

<?php } ?>

<?php endwhile;?>
2
Comentarii

Rețineți că orderby=highest_rated nu este o funcționalitate încorporată în WordPress. Folosești vreun plugin pentru evaluări?

RRikesh RRikesh
13 mai 2013 16:07:24

Da, folosesc un plugin pentru asta :) Mulțumesc pentru preocupare!

Swen Swen
13 mai 2013 16:25:06
Toate răspunsurile la întrebare 6
2
27

Pe lângă soluția oferită de birgire, începând cu WordPress 3.7, poți folosi Parametrii de dată.

Argumentele tale ar arăta astfel pentru a filtra articolele din ultimele 7 zile:

$args = array(
    'post_type' => 'post',
    'post_status' => 'publish',
    'orderby' => 'date',
    'order' => 'DESC',

    // Folosim date_query pentru a filtra articolele din ultima săptămână
    'date_query' => array(
        array(
            'after' => '1 week ago'
        )
    )
);
27 nov. 2014 17:34:37
Comentarii

Acesta ar trebui să fie abordarea începând cu versiunea 3.7 :-)

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

Acest lucru este bun, dar preia postările exact acum 24*7 ore. De exemplu, dacă acum este noapte, nu va prelua postările publicate acum 7 zile dimineața.

karlosuccess karlosuccess
3 mar. 2023 07:23:20
2

Cred că această problemă a fost rezolvată de multe ori aici pe WordPress Answers.

De asemenea, poți verifica exemplele din secțiunea Parametri de timp în Codex pentru WP_Query.

Iată două dintre ele (ușor modificate pentru nevoile tale)

Exemplul 1:

// Creează o nouă funcție de filtrare care va adăuga clauza WHERE la interogare
function filter_where( $where = '' ) {
    // postări din ultimele 7 zile
    $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' );

Exemplul 2:

// Creează o nouă funcție de filtrare care va adăuga clauza WHERE la interogare
function filter_where( $where = '' ) {
    // postări între 1 mai și 8 mai 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' )

presupunând că ai acest orderby=highest_rated acoperit prin intermediul unui plugin, așa cum ai menționat în comentariul de mai sus.

13 mai 2013 16:47:54
Comentarii

Mă întreb dacă 'date_query' este mai bine de utilizat? Prin adăugarea următoarelor argumente în wp_query: 'date_query' => array( array('after' => '1 week ago')

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

Da, acum aceasta ar fi metoda preferată, deoarece răspunsul a fost scris înainte de existența parametrului date_query ;-) @ChristineCooper

birgire birgire
27 nov. 2014 18:13:00
1

Din secțiunea WP_Query Parametri de Timp:

Returnează postări doar pentru săptămâna curentă:

$week = date('W');
$year = date('Y');
$query = new WP_Query( 'year=' . $year . '&w=' . $week );
13 mai 2013 16:03:38
Comentarii

Bună. Nu am testat asta încă, dar sunt destul de sigur că nu este exact ceea ce caut. Aceasta probabil listează postările publicate în săptămâna 13, de exemplu. Ceea ce vreau eu sunt postările care au fost publicate în ultimele 7 zile. De exemplu, de miercuri 8 mai până miercuri 1 mai.

Swen Swen
13 mai 2013 16:27:50
0

Pentru mine funcționează astfel, pentru a afișa postările din ultimele 7 zile în funcție de numărul de vizualizări și ordonate după numărul de vizualizări 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 );
28 feb. 2018 15:21:41
0

poți folosi simplu wp_get_archives()

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

Utilizare mai simplă a interogării SQL cu hook-ul WordPress posts where

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;
}

add_filter( 'posts_where', 'wpse29897_no_parents', 10, 2 );
function wpse29897_no_parents( $where, $query )
{
    if( isset( $query->query_vars['post_type'] ) && 'menu_plans' == $query->query_vars['post_type'] )
    {
        if( '' != $where )
    {
        
        $currentdate = date('Y-m-d');
        $currdate = new DateTime($currentdate);
        if($_GET['weekchk']){
            $currentweek = $_GET['weekchk'];
        }else{
            $currentweek = $currdate->format("W");
        }
        $week_array = getStartAndEndDate($currentweek,date('Y'));
        $ws = "'".$week_array['week_start']."'";
        $we = "'".$week_array['week_end']."'";
        $where .= " AND post_date >= ".$ws." AND post_date < ".$we."";
    }
    else
    {
        $where .= " AND post_date >= '2020-07-28' AND post_date < '2020-08-4'";
    }
}
return $where;
}
5 aug. 2021 16:08:53