web-dev-qa-db-fra.com

Article le plus consulté des 2 derniers jours avec WP_Query

Bonjour, j'ai le code destiné à recevoir le message le plus consulté des 2 derniers jours et il semble que cela ne fonctionne pas ou peut-être que mon code est tout simplement incorrect. J'apprécie toute aide. Merci.

  $args = array(
    'post_type' => 'post',
    'meta_key' => 'post_views_count',
    'orderby' => 'meta_value_num',
        'date_query' => array(
            array(
                'after'  => '2 days ago',
            )
    )

);
$the_query = new WP_Query( $args );

// The Loop
if ( $the_query->have_posts() ) {
    echo '<ul class="posts-list">';
    while ( $the_query->have_posts() ) {
        $the_query->the_post(); ?>
        <li>
        <?php if ( has_post_thumbnail() ) : ?>
            <a href="<?php the_permalink(); ?>" title="<?php the_title(); ?>">
                <?php the_post_thumbnail(); ?>
            </a>
        <?php endif; ?>

        <div class="content">
            <time datetime="<?php echo get_the_date(DATE_W3C); ?>"><?php the_time('d, F Y') ?></time>
            <span class="comments">
                <a href="<?php comments_link(); ?>" class="comments"><i class="fa fa-comments-o"></i> <?php echo get_comments_number(); ?></a>          
            </span>
            <a href="<?php the_permalink(); ?>" title="<?php the_title(); ?>"><?php the_title();?></a>
        </div>
        </li>
    <?php }
    echo '</ul>';
    /* Restore original Post Data */
    wp_reset_postdata();
} else {
    // no posts found
}
2
Mark Joey Lavapie

J'ai eu le même problème. J'avais cherché à plusieurs reprises pour ce problème. mais je n'ai pas pu trouver de solution à cela.

obtenir le post le plus consulté des 2 derniers jours sans recevoir les posts des 2 derniers jours

J'ai une table nommée "wp_popularpostssummary".

 enter image description here 

Résultat ll être

 enter image description here 

donc à partir de cette table obtenir les postids de résultat en utilisant la requête personnalisée suivante

$results = $wpdb->get_results($wpdb->prepare('SELECT postid,COUNT(*) AS qy FROM `wp_popularpostssummary` WHERE `view_date` BETWEEN DATE_SUB(CURRENT_DATE(), INTERVAL 1 WEEK) AND CURRENT_DATE() GROUP BY postid ORDER BY qy DESC'));

le résultat de la requête sera l'identifiant de publication des publications les plus consultées au cours de la dernière semaine. puis en utilisant la boucle foreach suivante pour obtenir le post id

            $pids = [];

                $results = json_decode(json_encode($results), true);

                foreach ($results as $result) {
                   foreach ($result as $k => $v) {
                       if($k == 'postid'){
                           array_Push($pids, $v);
                       }
                   };

                }

enfin, utilisez post ID pour récupérer les détails de la publication. le code suivra

                $args = array(
                    'post_type'         => 'post',
                    'post_status'       => 'publish',
                    'posts_per_page'    => '10',
                    'orderby'           => 'post__in',
                    'post__in'          => $pids

                );


                $query = new WP_Query( $args );   if ( $query->have_posts() ) {
                    // The Loop
                    while ( $query->have_posts() ) { //code here
                     }
                 }

Changer la durée de la date selon vos besoins. J'espère que cela aidera tout le monde!
Faites-moi savoir si vous avez une question.

1
Shameem Ali P.K

Essayez d’ajuster votre $args. Vous devrez obtenir la date d'il y a deux jours, puis passer l'année, le mois et le jour dans l'argument after en tant que tableau.

Essaye ça:

$date = strtotime ( '-2 day' ); // Date from two days ago

$args = array(
    'post_type' => 'post',
    'meta_key' => 'post_views_count',
    'orderby' => 'meta_value_num',
    'date_query' => array(
        array(
            'after' => array(
                'year'  => date('Y', $date ),
                'month' => date('m', $date ),
                'day'   => date('d', $date ),
            ),
        )
    )
);

Vous trouverez plus de documentation sur WP_Query et ses arguments, y compris date_queryhere .

0
Marc