- Team Ever - https://www.team-ever.com -

WordPress : avoir un compteur de vues intégré à son site

L’analyse des statistiques (vues, visites) sur son site internet en WordPress est à la fois utile mais également la pierre d’angle d’un marketing en ligne correctement orienté.

Voici comment avoir facilement et rapidement un compteur de vues sur vos articles dans votre blog WordPress autohébergé.

1/ Les visites et les vues

Il est nécessaire de bien différencier les visites des vues. 

Une visite est une personne regardant une page. Le compteur de vues ici présent permet de compter le nombre de fois que la page a été initiée. Ainsi, on ne comptabilise pas le nombre de visiteurs, car le même visiteur peut revenir plusieurs fois sur la page.

Cela signifie donc que ce compteur comptabilisera également chaque chargement de page par le même utilisateur. Si une seule et même personne accède trois fois à l’article dans la journée, le compteur sera incrémenté de trois.

2/ le compteur de vues

a/ Child theme

A moins que vous n’ayez développé votre propre thème, il est encore nécessaire de pouvoir ajouter ou modifier des fonctions, ce qui contraint à passer par un functions.php. En conséquent, vous devez impérativement disposer d’un thème enfant si vous n’en avez pas un sur mesure.

Si vous n’en disposez pas, cliquez ici pour voir le tutoriel expliquant la création d’un child theme.

b/ Functions

En premier lieu, travaillons sur le back-office. 

L’idée est d’afficher via les postmetas les vues associées article par article. Un getter est donc requis, et nous allons mettre en place un setter (qui sera rajouté dans un des fichiers du thème)

/**
 * Compteur de vues
 * @author Team Ever
 * @see https://www.team-ever.com/wordpress-avoir-un-compteur-de-vues-integre-a-son-site/
 */
//Getter
function getPostViews($postID){
    $count_key = 'post_views_count';
    $count = get_post_meta($postID, $count_key, true);
    if($count==''){
        delete_post_meta($postID, $count_key);
        add_post_meta($postID, $count_key, '0');
        return "0 View";
    }
    return $count.' Views';
}
//Setter
function setPostViews($postID) {
    $count_key = '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);
    }
}

add_filter('manage_posts_columns', 'posts_column_views');
add_action('manage_posts_custom_column', 'posts_custom_column_views',5,2);
function posts_column_views($defaults){
    $defaults['post-views'] = __('Views');
    return $defaults;
}
function posts_custom_column_views($column_name, $id){
        if($column_name === 'post-views'){
        echo getPostViews(get_the_ID());
    }
}
//Sort by post-views in admin
add_filter( 'manage_edit-post_sortable_columns', 'sort_by_views_column' );
function sort_by_views_column( $columns ) {
    $columns['post-views'] = 'post-views';
    return $columns;
}
add_action( 'pre_get_posts', 'post_views_orderby' );
function post_views_orderby( $query ) {
    if( ! is_admin() )
        return;
 
    $orderby = $query->get( 'orderby');
 
    if( 'post-views' == $orderby ) {
        $query->set('meta_key','post_views_count');
        $query->set('orderby','meta_value_num');
    }
}

c/ Modification du thème

A présent que nous pouvons comptabiliser les vues, il nous faut un déclencheur sur les articles, à savoir au chargement d’un article, quel qu’il soit.

Au sein de votre thème parent, repérez le fichier content-single.php, lequel contiendra l’affichage d’un article en particulier. Comme la fonction setPostViews() est désormais accessible, vous n’avez plus qu’à ajouter ceci :

setPostViews(get_the_ID());

Où get_the_ID() récupère tout simplement l’ID de l’article en cours. setPostViews() quant à lui se contentera d’incrémenter la valeur des vues pour l’article en cours, en tant que meta_value.

N’oubliez pas de bien conserver votre child theme propre et rangé !