Created
March 31, 2023 08:49
-
-
Save thierrypigot/4ef9d60f5a33ab5172acb6953933f301 to your computer and use it in GitHub Desktop.
Compteur de vues WordPress
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
/* | |
Plugin Name: Compteur de vues d'articles | |
Plugin URI: https://example.com/plugins/compteur-de-vues-darticles | |
Description: Ce plugin permet de compter les vues d'un article ou d'un custom post type. | |
Version: 1.0 | |
Author: Votre nom | |
Author URI: https://example.com | |
License: GPL-2.0+ | |
License URI: http://www.gnu.org/licenses/gpl-2.0.txt | |
Text Domain: compteur-de-vues | |
Domain Path: /languages | |
*/ | |
class CompteurVues { | |
public function __construct() { | |
// Charger les fichiers de traduction | |
add_action('plugins_loaded', [$this, 'load_textdomain']); | |
// Hooks pour les actions et les filtres | |
add_action('wp', [$this, 'prevenir_mauvaise_stat']); | |
add_action('admin_init', [$this, 'ajouter_filtres_actions_types_suivis'],1); | |
add_action('admin_menu', [$this, 'compteur_vues_menu']); | |
add_action('admin_init', [$this, 'compteur_vues_settings']); | |
} | |
/** | |
* Charger les fichiers de traduction pour l'internationalisation. | |
*/ | |
public function load_textdomain(): void { | |
load_plugin_textdomain('compteur-vues', false, basename(dirname(__FILE__)) . '/languages'); | |
} | |
/** | |
* Ajoute un compteur de vues lors de la consultation d'un article. | |
* | |
* @param int $post_id L'ID de l'article. | |
*/ | |
public function ajouter_vue(int $post_id): void { | |
$compteur_vues = get_post_meta($post_id, 'compteur_vues', true); | |
if ($compteur_vues === '') { | |
add_post_meta($post_id, 'compteur_vues', 1); | |
} else { | |
update_post_meta($post_id, 'compteur_vues', $compteur_vues + 1); | |
} | |
} | |
/** | |
* Empêche l'augmentation du compteur de vues lors de l'actualisation de la page. | |
*/ | |
public function prevenir_mauvaise_stat(): void { | |
if (is_singular(get_option('compteur_vues_types_suivis', array()))) { | |
global $post; | |
if (!isset($_COOKIE['compteur_vues_' . $post->ID])) { | |
$this->ajouter_vue($post->ID); | |
setcookie('compteur_vues_' . $post->ID, '1', time() + 3600, COOKIEPATH, COOKIE_DOMAIN, false); | |
} | |
} | |
} | |
/** | |
* Affiche le nombre de vues d'un article. | |
* | |
* @param int $post_id L'ID de l'article. | |
* @return int Le nombre de vues de l'article. | |
*/ | |
public function afficher_vues(int $post_id): int { | |
$compteur_vues = get_post_meta($post_id, 'compteur_vues', true); | |
return $compteur_vues === '' ? 0 : $compteur_vues; | |
} | |
/** | |
* Ajoute une colonne pour les vues dans la liste des articles de l'administration. | |
* | |
* @param array $colonnes Les colonnes existantes. | |
* @return array Les colonnes mises à jour. | |
*/ | |
public function ajouter_colonne_vues(array $colonnes): array { | |
$colonnes['compteur_vues'] = __('Vues', 'compteur-vues'); | |
return $colonnes; | |
} | |
/** | |
* Affiche le nombre de vues dans la colonne 'Vues | |
* pour chaque article. | |
* | |
* @param string $colonne Le nom de la colonne. | |
* @param int $post_id L'ID de l'article. | |
*/ | |
public function afficher_colonne_vues(string $colonne, int $post_id): void { | |
if ($colonne == 'compteur_vues') { | |
echo $this->afficher_vues($post_id); | |
} | |
} | |
/** | |
* | |
*Ajoute les filtres et les actions pour les types d'articles sélectionnés dans les options. | |
*/ | |
public function ajouter_filtres_actions_types_suivis(): void { | |
$post_types = get_option('compteur_vues_types_suivis', array()); | |
foreach ($post_types as $post_type ) { | |
add_filter('manage_'. $post_type .'_posts_columns', [$this, 'ajouter_colonne_vues']); | |
add_action('manage_'. $post_type .'_posts_custom_column', [$this, 'afficher_colonne_vues'], 10, 2); | |
} | |
} | |
/** | |
* Ajoute une page de réglages pour le plugin. | |
*/ | |
public function compteur_vues_menu(): void { | |
add_options_page(__('Réglages du Compteur de Vues', 'compteur-vues'), __('Compteur de Vues', 'compteur-vues'), 'manage_options', 'compteur-vues', [$this, 'compteur_vues_options']); | |
} | |
/** | |
* Affiche la page de réglages. | |
*/ | |
public function compteur_vues_options(): void { | |
?> | |
<div class="wrap"> | |
<h1><?php echo esc_html(__('Réglages du Compteur de Vues', 'compteur-vues')); ?></h1> | |
<form method="post" action="options.php"> | |
<?php | |
settings_fields('compteur-vues-settings'); | |
do_settings_sections('compteur-vues-settings'); | |
?> | |
<table class="form-table"> | |
<tr valign="top"> | |
<th scope="row"><?php echo esc_html(__('Types d\'articles à suivre', 'compteur-vues')); ?></th> | |
<td> | |
<?php | |
$types_suivis = get_option('compteur_vues_types_suivis', array()); | |
$types = get_post_types(array('public' => true), 'objects'); | |
foreach ($types as $type) { | |
$checked = in_array($type->name, $types_suivis) ? 'checked' : ''; | |
echo '<label><input type="checkbox" name="compteur_vues_types_suivis[]" value="' . $type->name . '" ' . $checked . '> ' . $type->label . '</label><br>'; | |
} | |
?> | |
</td> | |
</tr> | |
</table> | |
<?php submit_button(); ?> | |
</form> | |
</div> | |
<?php | |
} | |
/** | |
* Enregistre les réglages. | |
*/ | |
public function compteur_vues_settings(): void { | |
register_setting('compteur-vues-settings', 'compteur_vues_types_suivis'); | |
} | |
} | |
new CompteurVues(); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment