Vous cherchez un moyen de suivre les vues d'articles sans plugin en utilisant les métadonnées d'article ? Bien qu'il existe probablement un plugin pour cela, nous avons créé un extrait de code rapide que vous pouvez utiliser pour suivre les vues d'articles sans plugin en utilisant les métadonnées d'article dans WordPress.
Instructions :
Ajoutez ce code au fichier functions.php de votre thème ou dans un plugin spécifique au site :
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';
}
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);
}
}
// Remove issues with prefetching adding extra views
remove_action( 'wp_head', 'adjacent_posts_rel_link_wp_head', 10, 0);
Ajoutez éventuellement ce code à une colonne dans l'administration WordPress qui affiche les vues d'articles :
// Add to a column in WP-Admin
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());
}
}
Cette partie du code de suivi des vues définira les vues d'articles. Placez simplement ce code ci-dessous dans le fichier single.php à l'intérieur de la boucle WordPress.
<?php
setPostViews(get_the_ID());
?>
Remarque sur la mise en cache par fragments : Si vous utilisez un plugin de mise en cache comme W3 Total Cache, la méthode ci-dessus pour définir les vues ne fonctionnera pas car la fonction setPostViews() ne s'exécutera jamais. Cependant, W3 Total Cache dispose d'une fonctionnalité appelée mise en cache par fragments. Au lieu de ce qui précède, utilisez ce qui suit pour que setPostViews() s'exécute correctement et suive toutes vos vues d'articles, même lorsque la mise en cache est activée.
<!-- mfunc setPostViews(get_the_ID()); --><!-- /mfunc -->
Le code ci-dessous est facultatif. Utilisez ce code si vous souhaitez afficher le nombre de vues dans vos articles. Placez ce code dans la boucle.
<?php
echo getPostViews(get_the_ID());
?>
Remarque : Si c'est la première fois que vous ajoutez des extraits de code dans WordPress, veuillez consulter notre guide sur la manière de copier / coller correctement des extraits de code dans WordPress, afin de ne pas casser accidentellement votre site.
Si vous avez aimé cet extrait de code, n'hésitez pas à consulter nos autres articles sur le site tels que : 10 meilleurs plugins de témoignages WordPress et comment configurer le suivi des auteurs dans WordPress avec Google Analytics.
Une idée de comment utiliser ceci avec un type de publication personnalisé ?
des trucs géniaux exactement ce que je cherchais ?
cool content de savoir que vous aimez l'extrait, profitez-en.
De même, pouvons-nous compter le nombre d'images téléchargées sur le site WordPress, je suis sûr que nous le pouvons... une idée ?
Désolé pour le retard !
http://wpsnipp.com/index.php/functions-php/count-total-number-of-jpg-gif-png-images-in-media-library/
Exemple de Bob est possible ?
Articles les plus vus
Titre de l'article 3 100 vues
Titre de l'article 1 50 vues
Titre de l'article 2 10 vues
quel est l'impact de l'utilisation de cette fonction sur la base de données WordPress... pourrai-je effacer les journaux (vues) à des moments définis.. ??
Ce n'est pas un plugin avec beaucoup de fonctionnalités, il incrémentera simplement le compteur dans les métadonnées de l'article d'une unité à chaque fois que l'article sera consulté.
comment supprimer le mot “Vues” ?
Salut Joj,
Tu verras à la ligne 09 return $count.’ Views’;
remplace cette ligne par celle ci-dessous et c'est tout.
return $count;
Merci pour l'extrait. J'ai légèrement modifié setPostViews() pour déduire les vues des articles des éditeurs ou supérieurs :
function setPostViews($postID) { if (!current_user_can('level_7') ) : $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); } endif; }Merci drew, très cool.
Ça ne fonctionne pas pour moi sur localhost. Je ne sais pas pourquoi, mais chaque vue, qu'elle soit d'un éditeur ou supérieur, est comptée.
Par ailleurs, comment désactiver le comptage des vues par l'auteur de l'article ?
Oups. Je n'étais pas connecté en tant qu'administrateur pendant les tests. (facepalm)
Je suis content d'apprendre que vous avez réussi.
Salut Kevin !
J'ai essayé ce code sur une nouvelle installation de WP 3.2 et il fonctionne bien. J'ai cependant remarqué que bien qu'il ne devrait augmenter le compte que de 1, le mien le fait de 4. Des suggestions sur ce qui pourrait être faux ?
J'ai placé les fonctions au bon endroit et la seule modification que j'ai apportée est d'exclure les comptes des visiteurs connectés. Même sans cette modification, le code donne 4 vues au lieu de 1.
Hein ? Il ne devrait compter que par un, puisque c'est juste count++. Avez-vous eu d'autres personnes visiter votre site pendant qu'il fonctionnait ou plusieurs onglets ouverts ?
C'est sur mon localhost. C'est vraiment étrange mais c'est peut-être juste un truc de navigateur. Merci pour ce petit extrait sympa cependant !
Kevin, Tout d'abord, j'adore la simplicité de cette solution ! Le code fonctionne correctement sur mon serveur local, mais j'ai remarqué que lorsque je recharge ma page d'accueil (qui contient mes 5 articles les plus récents), chaque rechargement de ma page d'accueil ajoute une vue au compteur pour chacun des 5 articles. Y a-t-il un moyen d'éviter cela et de ne compter que les vues réelles des articles ? Merci.
Salut Rgsanchezz, je suis content que le snippet vous plaise. Concernant votre question, assurez-vous de placer setPostViews(get_the_ID()); dans le template single.php ou à l'intérieur de if(is_singular()) cela devrait également fonctionner si vous n'utilisez pas de template single.php, cela devrait résoudre le problème.
Avez-vous utilisé ce snippet dans une boucle séparée ? Si oui, vous devriez placer setPostViews(get_the_ID()); en dehors de la boucle "les plus vues" afin qu'il ne compte le +1 que pour l'article actuellement affiché et non pour tous ceux de la liste. Par exemple :
FAUX :
( ) CORRECT: ( )
Désolé, j'ai copié-collé le code dans la zone de réponse. Lien court via codepad, vérifiez-le là : )
http://codepad.org/QOUWc3XB
C'est juste un faux, rien d'autre, mec. Si vous vérifiez dans Firefox, il l'affichera, mais si vous vérifiez votre URL dans Chrome et IE, il ne s'affichera pas. Lorsque vous vérifiez dans Firefox, il n'affichera que vos vues, rien d'autre... et si vous pensez que c'est mon problème, dites-le-moi.
Salut Sunnysuffy, eh bien le snippet n'est pas un faux, cependant si vous avez un logiciel de mise en cache en cours d'exécution sur votre copie de WordPress, il pourrait y avoir des problèmes de fonctionnement. Supercache, etc.
[…] bon exemple du type de conseils que vous trouverez sur wpsnipp.com est « Suivre les vues de publication sans plugin en utilisant les métadonnées de publication ». Kevin commence par décrire ce que le snippet accomplira, puis vous donne un […]
Salut, c'est cool..
Merci beaucoup.
Cool, content que vous aimiez le snippet.
incroyable, merci !
de rien @4f9649a2dc0c5d186623a62544564bfe:disqus content que vous aimiez le snippet !
Inutile de dire que c'est un snippet génial. Mais s'il existe une solution pour le faire fonctionner avec des plugins de mise en cache, par exemple avec W3TC, ce serait encore mieux.
Quoi qu'il en soit, bon travail !
Je n'ai pas regardé cela, je vais examiner de plus près certains plugins et voir ce que je peux faire. Content que vous aimiez le snippet cependant.
Salut Kevin, j'ai parcouru les forums pour trouver une solution. Apparemment, beaucoup de gens ont des problèmes pour exclure des fonctions de la mise en cache. Malheureusement, il ne semble pas y avoir de remède jusqu'à présent. Je suis sûr qu'il y en a un. Espérons que l'un de nous trouvera quelque chose bientôt 🙂
bonjour, Pour autant que je sache, W3TC a une option « Ignored query stems » pour filtrer certaines fonctions du cache.
Bonjour, bonnes informations, est-il possible d'utiliser echo getPostViews(get_the_ID()); dans la section des articles du panneau d'administration si je veux utiliser les vues d'articles uniquement à des fins personnelles/administratives
Oui, vous pouvez, j'ai posté un extrait peu de temps après pour cette raison.
http://wpsnipp.com/index.php/functions-php/display-post-views-within-admin-post-columns/
C'est génial, ça marche à merveille. Je vais l'utiliser sur un nouveau site de fonds d'écran sur lequel je travaille. J'ai noté votre site dans les fonctions pour référence future.
Je me demande si quelque chose peut être fait pour n'enregistrer qu'une seule vue par session pour chaque utilisateur. Ce serait bien pour éviter les vues "fausses" lors du rafraîchissement de la page. Si quelqu'un peut faire ça (si c'est même possible), ce serait génial.
Merci @6c9628c836d0d3ed67e8ef3b43a993dd:disqus Heureux d'apprendre que vous aimez l'extrait ! Je suis sûr que quelque chose comme ça pourrait être fait, cependant je l'utiliserais comme une méthode pour suivre la popularité d'un article plutôt que pour des statistiques détaillées.
J'ai un problème avec ça, si je consulte le deuxième article le plus récent, l'article le plus récent reçoit 1 vue ajoutée, des idées pourquoi ?
La seule raison à laquelle je peux penser est que vous n'avez pas la fonction setPostViews(get_the_ID()); dans le single.php ? Pouvez-vous confirmer que c'est le cas...
Oui, c'est dans le single.php dans la boucle
J'ai le même problème après avoir configuré une liste des articles les plus populaires dans la barre latérale, en utilisant l'article "articles les plus populaires utilisant les vues post meta". setPostViews(get_the_ID()); est dans le single.php. setPostViews(get_the_ID()); est dans le single.php.
J'ai aussi un problème ici. Le mien est dans single.php, j'ai suivi les instructions. Cependant, je remarque que si je visite un article (avec un ID d'article disons 20), un autre article (avec un ID d'article disons 22) reçoit également +1 sur le compteur de vues. La chose étrange est que lorsque j'affiche l'ID de l'article reçu par la fonction setPostViews, seul l'ID de l'article 20 s'affiche sur mon écran.
Eh bien, cela devrait fonctionner sans aucun problème, cependant si vous modifiez les articles, vous pouvez voir le champ personnalisé ajouté avec les vues actuelles de l'article. Je rechargerais la page et verrais si le champ personnalisé se met à jour sur les deux articles. Quelle version de WordPress utilisez-vous actuellement ?
J'avais le même problème. Il m'a fallu une éternité pour le résoudre. Le problème est causé par Wordpress qui charge les liens relationnels pour les articles précédents et suivants dans l'en-tête. Firefox, par défaut, précharge les liens REL avec la valeur Next, de sorte que les deux articles sont « vus »
La solution que j'ai trouvée a été de supprimer l'action qui ajoute cette fonctionnalité à la fonction wp_head : remove_action( ‘wp_head’, ‘adjacent_posts_rel_link_wp_head’, 10, 0);
Chris, merci pour le commentaire. J'ai mis à jour l'article pour informer les autres de cette solution au problème. J'ai également ajouté un lien vers votre site. Merci encore,
Salut Wprebel, vous avez peut-être un plugin ou autre chose qui a causé un problème avec l'extrait. L'extrait est assez simple et met simplement à jour les métadonnées de l'article lorsqu'un utilisateur charge l'article, il n'y a pas grand-chose qui puisse mal tourner. Sans examiner votre thème en détail, je ne ferais que deviner,
@e4fcff6cc58dc5e1b2ab556d9cdb2cb2:disqus vous devez utiliser la fonction getPostViews() lorsque vous souhaitez afficher les vues d'articles et setPostViews() sur le single.php.
[…] Suivre les vues d'articles sans plugin en utilisant les métadonnées d'articles […]
[…] Via : lien […]
Cette technique ne fonctionnera pas avec un plugin de cache. Je voudrais utiliser le plugin WP-PostViews car il offre une meilleure compatibilité avec les plugins de cache.
C'est vrai, il ne fonctionne pas bien avec les plugins de cache. Cependant, en tant qu'extrait rapide pour suivre les vues, il fonctionne assez bien.
Je renommerais la clé de métadonnées post_views_count en _post_views_count pour la masquer afin d'éviter que les utilisateurs ne modifient les vues d'articles à partir des champs personnalisés.
Ahh bonne idée Daniel, vous pourriez faire ça.
[…] vous souhaitez afficher le nombre de vues : <?php echo getPostViews(get_the_ID()); ?> Source → Suivre le nombre de vues des articles en utilisant les métadonnées d'article Ce extrait créera une liste de vos articles les plus populaires […]
Y a-t-il un moyen de faire un aperçu des articles les plus consultés ?
Un peu comme les articles populaires dans votre barre latérale, mais en utilisant le nombre de vues des articles au lieu des commentaires ?
Salut Alec,
J'ai terminé un article à ce sujet hier et je le publierai dans environ une heure.
Première fois que je visite votre site, et déjà mon héros ! +1
Est-il possible de faire une liste des articles les plus consultés en se basant sur ce code ?
Je ne suis pas sûr de comprendre, pouvez-vous donner un peu plus de détails.
Exemple :
Articles les plus consultés
Titre de l'article3 100 vues
Titre de l'article1 50 vues
Titre de l'article2 10 vues
Salut Bob,
Oui, j'avais pensé à faire quelque chose comme ça, je vais expérimenter l'idée un peu et poster un extrait.
Je viens de trouver cet article.
http://www.moocr.com/blog/posts/2010/display-posts-views-count-without-plugin-in-wordpress.html
J'ai fait ce que le gars a dit. Ça ne semble pas fonctionner. Est-ce que ça fonctionne en localhost ?
Cela devrait fonctionner correctement en local, cependant vous devrez recharger la page pour voir les vues. N'oubliez pas de placer setPostViews dans la boucle dans single.php. Je l'ai testé sur wpsnipp.com pour suivre les vues et cela a bien fonctionné. Ce que fait le snippet, c'est d'ajouter un nombre aux métadonnées du post, puis de l'incrémenter chaque fois que single.php se charge. Quelle version de WordPress utilisez-vous ?
Merci. Je viens de découvrir que je ne l'implémentais pas correctement.
Cool, content que tout fonctionne parfaitement...
Dois-je les définir manuellement ? :/
Oui, vous devrez ajouter ce code manuellement à vos modèles WordPress.
Super partage Chad. Merci 😀