Privatiser des pages ou des articles dans WordPress
Comment réserver certains articles ou certaines pages à vos abonnés dans WordPress sans surcharger votre site d'extensions "usines à gaz" ? Je vous propose d'utiliser simplement les comptes utilisateurs de WordPress. A partir du grade abonné, les utilisateurs pourront accéder à des contenus réservés.
Créer un thème enfant
La première étape consiste à créer ou compléter un thème enfant dans lequel vous mettrez trois fichiers :
- le fichier functions.php
- la copie du modèle page.php afin de privatiser certaines pages
- la copie du modèle single.php afin de privatiser certains articles
Si vous ignorez ce qu'est un thème enfant, je vous invite à consulter cet article.
Modification du fichier functions.php
Ajoutez le code suivant dans le fichier functions.php :
<?php
/* Déclaration de la fonction force_connexion() pour forcer la connexion des utilisateurs */
function force_connexion() {
if (!is_user_logged_in()) {
auth_redirect();
}
}
La fonction force_connexion() redirigera l'utilisateur vers la page de connexion s'il n'est pas connecté.
A présent, la stratégie consiste à appeler cette fonction quand l'utilisateur souhaitera consulter des contenus réservés aux abonnés.
Privatisation de pages
Pour privatiser une page, notez le slug de votre page, puis glissez sournoisement ce code en amont du modèle page.php de votre thème enfant :
<?php
/* Authentification exigée pour la page dont le slug est "confidentiel" */
global $post;
if ($post->post_name == 'confidentiel') {
force_connexion();
}
Pour privatiser plusieurs pages, notez les slugs des pages, puis utilisez joyeusement l'opérateur de comparaison or :
<?php
/* Authentification exigée pour les pages dont les slugs sont "confidentiel" et "secret" */
global $post;
if ($post->post_name == 'confidentiel' or $post->post_name == 'secret') {
force_connexion();
}
Réserver des articles aux abonnés
Ajoutez une catégorie Abonné à vos articles et cochez cette catégorie pour les articles que vous souhaitez privatiser.
Ajoutez ensuite ce code en amont du modèle single.php de votre thème enfant :
<?php
/* Authentification exigée pour les articles dont la catégorie est "Abonné" */
$categories = wp_get_post_terms(get_the_ID(), 'category');
foreach( $categories as $category ) {
if ($category->name == 'Abonné') {
force_connexion();
}
}
Pourquoi ne pas utiliser la case visibilité privée ?
J'entends déjà mes lecteurs et lectrices se plaindre : " Par Saint Georges ! pourquoi n'utilise-t-il pas la case visibilité privée, prévue à cet effet ? "
La visibilité privée des pages et des articles ne concerne que les grades administrateurs et éditeurs. Or il serait dangereux pour la sécurité du site d'attribuer ce grade à de simples visiteurs pour leur réserver quelques contenus privés. D'autre part, la visibilité privée retire toute visibilité de l'article, y compris le résumé de l'article, bien utile pour motiver certains utilisateurs à s'abonner.
Personnalisation de la page de connexion
Pour fignoler la page de connexion, je vous propose d'ajouter le logo de votre site plutôt que le logo de WordPress avec l'extension Change WordPress Login Logo.