Modérateur
Bonjour,

Je souhaiterais restreindre l'accès à une catégorie d'un site fonctionnant sur WordPress. Je sais qu'il existe des plugins se chargeant de cela, mais je souhaiterais faire plus simple et surtout par moi-même pour faciliter la maintenance. Je suis à la recherche d'une idée surtout, pas forcément du moyen de la mettre en oeuvre, même si je suis également preneur de code qui fonctionne déjà ou qui pourrait être source d'inspiration.
Je voudrais que la catégorie à accès restreint puisse être accessible avec un mot de passe fourni aux utilisateurs autorisés (cela ne doit pas dépendre de leur rôle, aucune inscription ne doit être demandée, le mot de passe serait envoyé par courriel par exemple). Donc, la catégorie devrait pouvoir être accessible grâce à un mot de passe, comme cela est déjà possible pour un article.
Est-ce une bonne méthode ? D'autres idées ?

Merci par avance Smiley smile

[Remarque après discussion]
Cette discussion a donné lieu à un approfondissement de ma part. Le plugin est à présnet téléchargeable sur WordPress.org : https://wordpress.org/plugins/access-category-password/
[/Remarque]
Modifié par jojaba (20 Sep 2014 - 06:51)
Administrateur
Bonjour,

j'avais regardé il y a bien longtemps (vers WP 3.0 je crois) comment protéger des posts et j'avais retenu que différents plugins protégeaient différentes choses : un plugin interdisant en lecture certains posts ne protégeait en particulier pas forcément les pièces jointes (PDF...) d'être téléchargées si elles étaient indexées à l'air libre sur un autre site !
À voir s'il ne faut pas en plus restreindre l'affichage : dans le plan du site, dans des boucles listant les titres sans se soucier de la catégorie, dans les résultats de recherche, d'un document dont on connait l'adresse sans avoir accès à l'unique post qui le référence, etc, etc
Modérateur
Bonsoir,

Je me suis penché sur ce problème un peu plus en profondeur et ai finalement développé un plugin en prenant comme inspiration le pugin dont je parle plus haut.
Voici ce que j'ai fait pour l'instant : [lien supprimé pour obsolescence]
Je n'ai as utilisé de cookies mais des sessions php. Ça devrait être plus sûr...
Le plugin possède une page d'options où l'on peut définir :
* Un seul mot de passe pour toutes les catégories à accès restreint
* La liste des catégories du blog avec cases à cocher pour définir les catégories impactées
* Le texte qui s'affiche avant le champ de saisie du mot de passe
* le message d'erreur qui s'affiche si on se trompe de mot de passe
Le principe de remplacement du contenu de l'article est le même que celui proposé dans le plugin dont je me suis inspiré (le contenu de l'article est remplacé par un formulaire de demande de mot de passe). Cela correspond à ce dont j'ai besoin. J'ai en plus filtré les extraits :
add_filter( 'the_content', 'acp_frontend_changes' );
add_filter( 'get_the_excerpt', 'acp_frontend_changes' );

Le mot de passe est crypté avant d'être stocké. Je n'ai pas encore traduit, mais c'est prêt pour ça.
Hélas, les pièces jointes (ou plutôt les liens contenus dans l'article) seront tout de même accessibles si on connait le chemin exact. Tu as une suggestion à ce propos ?

Ça serait vraiment chouette si tu pouvais jeter un oeil à ça et me dire si ça tient la route ou pas.
Merci d'avance Smiley smile

PS : lors de l'activation du plugin, une erreur s'est affiché (cela ne l'a pas empêché de fonctionner) :
L’extension a généré 3 caractères d’affichage inattendu lors de l’activation. Si vous voyez un message « headers already sent » (Les en-têtes ont déjà été envoyés), des problèmes avec les flux de syndication ou d’autres erreurs, essayez de désactiver ou enlever cette extension.


PS2 : je viens de me rendre compte que j'ai oublié de filtrer les flux rss, mais là, il va falloir que je fasse des recherches...
Modifié par jojaba (20 Sep 2014 - 06:47)
Salut salut,

je suis débutant sur WordPress et je chercher exactement la même chose, j'ai l'habitude de coder moi même un site, en php session start etc...

le problème avec WordPress c'est que c'est trop abstrait.

j'avais trouver cette article pas mal pour répondre à mon besoin de restreindre uniquement le contenue d'une page : http://bulledev.com/wordpress-limiter-acces-section-utilisateurs-connecte/

J'essaye ton plugin, qui est plus facile d'utilisation. Mais on peut directement mettre un mot de passe du même genre en faisant une " modification rapide " d'une page ou d'un article ce qui permet d'avoir différents mot de passe par articles/pages
Modifié par JENCAL (18 Sep 2014 - 11:06)
Modérateur
a écrit :
Mais on peut directement mettre un mot de passe du même genre en faisant une " modification rapide " d'une page ou d'un article ce qui permet d'avoir différents mot de passe par articles/pages

Tu n'as pas compris le but du plugin je pense. Il s'agit de proposer un accès restreint à tous les articles d'une même catégorie.
Modérateur
J'ai trouvé un moyen de résoudre le problème du flux RSS.
Il suffit de :
¤ Supprimer les flux rss créés automatiquement par WordPress
¤ Supprimer les entêtes créées automatiquement
¤ Créer un nouveau flux avec un template personnalisé

J'ai fait : [lien supprimé pour obsolescence]
Il faut flusher les règles de réécriture pour que le flux bénéficie de cette réécriture. J'ai pas trouvé le moyen de flusher après la création du flux (voir fichier access-cat-password.php). Le flux se trouve à l'adresse : http://monsitewp.fr/?feed=acp-feed si pas de flush et sur http://monsitewp.fr/feed/acp-feed ou http://monsitewp.fr/acp-feed si flush. je rappelle que pour flusher les règles de réécriture, il suffit de se rendre dans l'admin au niveau des réglages au menu Permaliens.
Je proposerai plus tard une personnalisation du nom de ce flux dans les options.
Modifié par jojaba (20 Sep 2014 - 06:48)
Oui j'avais compris à quoi sert ton plugin, il est d’ailleurs très pratique
Modifié par JENCAL (18 Sep 2014 - 14:08)
Modérateur
Voilà, je pense avoir suffisamment fignoler la chose pour le proposer sur la page des extensions de WordPress. Je vous livre la mouture avec traduction fr et différents changements et améliorations (j'ai modifié des noms de variables, le stockage se fera donc autre part dans la base de données et les données que vous aurez précédemment définies ne seront pas utilisées). Il faut donc reparamétrer depuis le début...

Voici le paquetage : [lien supprimé pour obsolescence]

Reste à voir comment protéger les fichiers joints dans les articles protégés. Je n'ai pas regardé comment la fonctionnalité incluse dans WordPress (protection de chaque article possible individuellement avec un mot de passe) a été développée et si le cas de figure du téléchargement de pièces jointes a été traité, il faudrait que je regarde de ce côté-là peut-être...

Si quelqu'un pouvait me donner une piste... Smiley cligne
Modifié par jojaba (20 Sep 2014 - 06:47)
Modérateur
Bonjour,

Pour le problème d'accès aux pièces jointes à l'article, j'en ai discuté avec mon fils, voilà ce qu'il propose :
¤ Création d'une redirection dans un .htaccess de tout ce qui est contenu dans le dossier wp-content/uploads vers un fichier php.
¤ Ce fichier vérifie si la la variable de session du plugin est bien valide et autorise le téléchargement dans ce cas.

Donc 2 choses à voir :
¤ Comment rediriger l'ensemble des requêtes vers le dossier uploads vers le fichier de traitement.
¤ Comment lancer le téléchargement après la vérification : récupération de l'adresse du fichier demandé (get mais comment ?) et lancer un téléchargement (je pense en utilisant header())...

Qu'en pensez-vous ?
Modérateur
jojaba a écrit :

Donc 2 choses à voir :
¤ Comment rediriger l'ensemble des requêtes vers le dossier uploads vers le fichier de traitement.
¤ Comment lancer le téléchargement après la vérification : récupération de l'adresse du fichier demandé (get mais comment ?) et lancer un téléchargement (je pense en utilisant header())...

1) Il semblerait que j'aies trouvé pour la redirection (source : http://alexandre.alapetite.fr/doc-alex/redirections/index.fr.html) :
RedirectMatch permanent wp-content/uploads/(.*\.[a-z0-1]{3,4})$  http://monsite.fr/wp-content/plugins/access-category-password/fichier_de_traitement.php?file=$1

Je n'ai pas encore testé... De cette manière, dès que l'on charge une pièce jointe d'un article, on passe obligatoirement par le fichier de traitement (dans l'exemple fichier_de_traitement.php) et on lui indique la pièce jointe concernée dans la chaîne get. Dans ce fichier de traitement on va faire les chose suivantes :
¤ Récupération de la chaîne get
¤ A partir de cette chaîne (qui n'est autre que le chemin vers le fichier joint) récupération de l'id de l'article parent dans la base de données de WordPress (avec $wpbd, table wp_posts )
¤ Vérification grâce cette id si l'article se trouve dans une catégorie protégée.
¤ Arrêt du script si pas de variable de session valide ou envoi du fichier si la variable est bonne.

Le petit souci est que le fichier de traitement n'a pas la possibilité de lancer les fonctions de WordPress ( pour récupérer la variable de session en cours, je pense que le démarrage de la session suffira, n'est-ce pas ?). Il faudrait y inclure les bibliothèques nécessaires. Quelqu'un pourrait-il me faire gagner du temps et m'indiquer la ou les bibliothèque à insérer avant de commencer le traitement en utilisant les fonctions WP ?