Tutorial : Plugin WordPress, Articles populaires par nombre de visites

En terme d’articles populaires, WordPress ne permet par défaut que de lister ceux qui ont reçu le plus de commentaire.
Ceci n’étant pas à mon avis un critère pertinent, voici donc comment réaliser un plugin qui va lister les articles les plus consultés.

Nous allons donc réaliser un plugin WordPress qui va utilisé la table postmeta pour y ajouter l’information suivante : le nombre de fois qu’un article a été consulté.


Un plugin WordPress n’est ni plus ni moins qu’un fichier PHP contenant des fonctions. En utilisant la fonction add_action(), on peut ainsi en demander l’exécution.

Il nous faut donc une fonction qui va :

  1. vérifier que l’on se trouve dans un article,
  2. insérer ou mettre à jour une entrée dans la table postmeta.

[php]
function appv_post_viewed() {
if( is_single() ) {
global $wpdb, $post;

// On nettoie le cache
$wpdb->flush();

// On vérifie l’existence d’une entrée dans postmeta pour ce post
$data = $wpdb->get_row( "SELECT * FROM {$wpdb->postmeta} WHERE post_id=’{$post->ID}’ AND meta_key=’appv_count’", ARRAY_A );

// Si on a une entrée, on va incrémenter sa valeur
if( !is_null( $data ) ) {
// On incrémente le compteur
$new_views = (int) $data[ 'meta_value' ] + 1;

// On prépare donc la requête de mise à jour
$query_meta_views = "UPDATE {$wpdb->postmeta} SET meta_value =’{$new_views}’ WHERE post_id=’{$post->ID}’ AND meta_key=’appv_count’;";
}
else {
// Une nouvelle entrée dans postmeta
$query_meta_views = "INSERT INTO {$wpdb->postmeta} (post_id, meta_key , meta_value) VALUES (‘{$post->ID}’, ‘appv_count’, ’1′);";
}

// On exécute notre requête
$wpdb->query( $query_meta_views );

// On nettoie le cache
$wpdb->flush();
}
}
[/php]

On ajoute une action (un appel à une fonction) dans le wp_head() qui va appeler notre fonction appv_post_viewed().

[php]
// on ajoute l’action "appv_post_viewed" dans "wp_head"
add_action( ‘wp_head’, ‘appv_post_viewed’ );
[/php]

Et voila !
A chaque consultation d’un article, une entrée de la table postmeta sera créer ou incrémenter, ce qui nous servira de compteur de visites.

Et pour en faire un widget ?

On va créer une fonction qui va récupérer les 10 articles les plus consultés

[php]
function appv_widget( $args ) {
global $wpdb;

// on récupère les données par défaut de la construction d’un widget
extract( $args );

echo $before_widget; // par défaut <li>

echo $before_title . "Articles populaires" . $after_title; // <h2> … </h2>

echo "<ul id=’popular_by_views_list’>";

// Notre requête : dans postmeta, on trie les entrées par meta_value avec la clé "appv_count"
$popular = $wpdb->get_results( "SELECT post_id, meta_value FROM {$wpdb->postmeta} WHERE meta_key=’appv_count’ ORDER BY meta_value DESC LIMIT 0, 10", ARRAY_N );

// on boucle sur ces posts
foreach( $popular as $post ) {
$ID = (int) $post[ 0 ];
$views = number_format( (int) $post[ 1 ] );
$post_url = get_permalink( $ID ); // le permalien de ce post
$title = get_the_title( $ID ); // le titre de ce post

echo "<li><a href=’{$post_url}’>{$title}</a> – {$views} vues</li>";
}

echo "</ul>";

echo $after_widget; // par défaut </li>
}
[/php]

On ajoute maintenant notre widget dans l’interface d’administration.

[php]
// on ajoute ce widget dans les "Widgets disponibles"
wp_register_sidebar_widget( ‘popular_by_views’, ‘Articles Populaires’, ‘appv_widget’ );
[/php]

Et voilà la base de ce plugin.

Plugin WordPress : Articles populaires par visites

Libre a vous de l’améliorer avec entres-autres :

  • un widget admin pour le tableau de bord,
  • à la désactivation du plugin, la suppression de toutes les entrées de postmeta avec la clé appv_count,

Article written by devzonefr

Développeur d'applications de formation, je me suis aujourd'hui spécialisé dans le développement web.

4 réponses à “Tutorial : Plugin WordPress, Articles populaires par nombre de visites”

  1. geekeries | Créer théme Wordpress à partir de zéro, bons tuyaux

    [...] Sans oublier un script pour afficher les articles les plus populaires: Articles populaires par nombre de visites [...]

  2. Guilhem

    Bonjour.

    Le seul défaut de ces plug in de lecture d’articles est qu’ils ne tiennent pas compte des multiples visites de la même personne qui incrémentent le compteur de façon inappropriée.
    Serait-il possible de corriger cela via un cookie ou tout autre moyen qui tiendrait compte de l’adresse IP par exemple ?

    MErci.

  3. DORNON

    Bonjour et merci pour tous ces enseignements.
    Mais étant novice, j’avoue ne pas avoir tout suivi :(

    comment l’installer pour que cela fonctionne ?
    où mettre cette fonction « En utilisant la fonction add_action(), on peut ainsi en demander l’exécution. »

    Merci pour votre aide et réactivité

Laisser un commentaire