web-dev-qa-db-fra.com

Afficher le post le plus populaire par semaine

Le plugin Messages les plus populaires ne supporte pas WPML et par conséquent, j'ai essayé de créer le mien.

J'ai trouvé ce tutoriel dans la création de votre propre code pour afficher les publications les plus populaires sur mon site: Comment afficher les publications populaires par Views dans WordPress sans plugin

Cependant, cela ne prend pas le facteur par semaine. Je voudrais que cela pointe dans la bonne direction.

Ce code met à jour le nombre de vues réel des publications:

function wpb_set_post_views($postID) {
    $count_key = 'wpb_post_views_count';
    $count = get_post_meta($postID, $count_key, true);
    if($count==''){
        $count = 0;
        delete_post_meta($postID, $count_key);
        add_post_meta($postID, $count_key, '0');
    }else{
        $count++;
        update_post_meta($postID, $count_key, $count);
    }
}
//To keep the count accurate, lets get rid of prefetching
remove_action( 'wp_head', 'adjacent_posts_rel_link_wp_head', 10, 0);

Ajoutez ces champs à l'article:

week_count: integer
current_week: datetime

Vérifiez si current_week correspond à la semaine en cours, sinon réinitialisez le week_count et ajoutez 1, puis définissez le current_week sur la semaine en cours.

Y a-t-il une autre façon de faire cela de manière plus intelligente et plus efficace?

5
Philip

Bon, voici la requête complète pour afficher les publications les plus populaires de la semaine en cours. J'utilise meta_query pour limiter les résultats de la requête à la semaine en cours uniquement.

Tous les messages de la semaine en cours seront triés, puis triés par nombre de vues ajoutées par le champ personnalisé wpb_post_views_count que vous avez utilisé dans votre question.

// Current week's popular posts

$query_args = array(
    'post_type' => 'post',
    'date_query' => array(
        array(
            'year' => date( 'Y' ),
            'week' => date( 'W' ),
        ),
    ),
    'meta_key' => 'wpb_post_views_count',
    'orderby' => 'meta_value_num',
    'ignore_sticky_posts' => 1,
    'posts_per_page' => '-1',
);

$my_query = new WP_Query( $query_args );

if ( $my_query->have_posts() ) :
    while ( $my_query->have_posts() ) : $my_query->the_post();

        // add your loop content here.

    endwhile;
endif;

wp_reset_postdata();
1
Robert hue