Je travaille sur un site wordpress pour un client qui souhaite un "intranet" interne pour ses employés. Les besoins fondamentaux sont:
Cette information est sensible et réservée aux employés. Ils souhaiteraient que chaque employé ait un nom d'utilisateur/mot de passe et ne puisse voir les informations et les documents qu'une fois connectés.
J'ai vu ces plugins, et quelques-uns du même genre, mais ils semblent limités et, bien sûr, ils sont complètement obsolètes:
Je sais que je peux protéger par mot de passe des articles/pages individuels. Puis-je protéger par mot de passe toute une catégorie de messages ou, mieux encore, un type de message personnalisé? Fondamentalement, je dois regrouper certaines pages/publications sous un identifiant. Les informations sont sensibles et ne peuvent donc pas être disponibles, par exemple dans le flux RSS. Comment puis-je faire ceci?
Conclusion: l’option 1 m’intéresse si c’est beaucoup plus facile, mais je préférerais l’option 2. À l’heure actuelle, après quelques recherches, je ne trouve que des plugins obsolètes qui permettent de résoudre ce problème et ne paraissent pas trouver de solution fiable. moyen de tirer l'un ou l'autre. Merci de votre aide!
Il est possible de cocher les pages d'archives et les pages simples correspondantes
Mais la seule chose que vous devriez absolument faire avec toutes les autres solutions que vous prenez est d’utiliser le filtre the_posts
. Il filtre les publications que tout WP_Query récupère. Vous obtiendrez un tableau d'objets post. Vérifiez la condition et désélectionnez l'objet s'il y est. Celui-ci est destiné pour quand quand toutes les autres solutions sont contournées. Ceci est le dernier recours si un plugin inconnu récupère les publications sans que vous en ayez la moindre idée.
Une autre chose à utiliser est le filtre pre_get_posts
pour vérifier les variables de la requête et les modifier si nécessaire.
posts_where
filter, utilisez-le pour ajouter une autre clause where à la requête mysql
Ce n'est pas complètement sécurisé mais cela devrait couvrir la plupart des cas et même la plupart des plugins externes.
Si vous utilisez un type de publication personnalisé, cela devient beaucoup plus facile. Vous pouvez définir des fonctionnalités personnalisées pour ce post_type, puis les attribuer uniquement aux utilisateurs d'un rôle particulier.
Vous pouvez demander à votre client de définir manuellement chaque message sur privé, mais vous pouvez être sûr qu'il l'oubliera maintenant et ensuite. Si la sécurité est importante, il vaut mieux ne pas y aller.
C'est vieux - mais voici comment j'ai résolu ce problème en fin de compte.
Vous pouvez personnaliser cela pour n’autoriser que certains utilisateurs - par exemple, en utilisant le plugin "Membres" @jason mentionné.
Le code:
Dans functions.php
/* Require Authentication for Intranet */
function my_force_login() {
global $post;
if (!is_user_logged_in()) {
auth_redirect();
}
}
En haut de page-intranet.php et single-intranet-pages.php
<?php my_force_login(); ?>
Et c'est tout. Ça marche.
Notes sur la sécurité:
Si vous avez une méthode simple, plus sûre, laissez-la ci-dessous et je la marquerai comme solution.
Vous pouvez définir la visibilité du contenu sur privé sur des pages spécifiques, ce qui obligerait les visiteurs à disposer d'un identifiant de connexion WordPress ET de niveaux d'autorisation pour afficher le contenu. Ce que je suggérerais peut-être, c’est de créer un template-intranet.php
pour la page "Intranet" et d’ajouter un menu personnalisé pour les pages qui font partie de l’intranet afin qu’elles puissent être répertoriées sur cette page. Vous devez toujours définir le statut de toutes les pages sur Privé.
Une solution de contournement pour rendre toutes les pages intranet privées serait dans le functions.php
vous pouvez écrire une condition pour vérifier si la page en cours est une sous-page de la page "Intranet" - si la page est une sous-page d'intranet, puis vérifier si l'utilisateur est connecté , et s’ils ne sont pas redirigés, sinon continuez.
Si vous souhaitez gérer manuellement l'authentification et l'intégrer dans l'authentification WordPress, @Rezen a la bonne idée. Je préférerais simplement utiliser un modèle de page spécifique ou une liste de modèles de page pour vérifier l'authentification.
Vous pouvez également consulter le plug-in "Membres" de Justin Tadlock, qui contient probablement beaucoup de fonctions de gestion des rôles personnalisés que vous pouvez exploiter.
Filtres:
add_filter('template_include', 'theme_check_user_permissions', 1, 1);
add_filter('logout_url','theme_logout_redirect');
if(!current_user_can('edit_users')) add_filter( 'wp_die_handler', create_function('',"return 'theme_wp_die_handler';"));
Si l'utilisateur n'est pas enregistré, redirigez-le ensuite vers la page de connexion sur le site (guest.php, pas de tableau de bord).
function theme_check_user_permissions($template)
{
return (is_user_logged_in() ? $template : TEMPLATEPATH.'/guest.php');
}
Après la connexion, redirection vers la page d'accueil
function theme_logout_redirect($url, $redirect = null)
{
return $url.'&redirect_to='.urlencode(get_bloginfo('url'));
}
Supprimer la page wp die (redirection vers la maison)
function theme_wp_die_handler()
{
wp_redirect(get_bloginfo('url'),307);
exit;
}
Ceci est juste une modification de timshutes 'answer - si vous voulez que certaines pages nécessitent un identifiant de connexion et que vous ne voulez pas les mettre dans un type de message personnalisé, vous pouvez ajouter à functions.php:
add_shortcode('need_login', 'shortcode_needLogin');
function shortcode_needLogin() {
if (!is_user_logged_in()) {
auth_redirect();
}
}
Et en haut des pages pour lesquelles vous souhaitez demander une connexion, vous pouvez simplement faire:
[need_login]