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.

Articles réservés aux abonnés

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.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.