Existe-t-il un moyen d'afficher une page 404 si l'utilisateur actuellement connecté n'a pas le droit de visualiser la page? Je cherche une méthode PHP, quelque chose comme
if( !current_user_can('administrator') ) { show_404(); exit(); }
J'ai pensé à utiliser une redirection, mais je voudrais garder l'URL identique.
Réponses:
J'ai pu afficher une erreur 404 en utilisant le code suivant dans mon en-tête.
Pour le décomposer::
$wp_query->set_404()
indique à wp_query qu'il s'agit d'un 404, cela change le titrestatus_header()
: envoie un en-tête HTTP 404get_template_part()
: affiche le modèle 404la source
http_status_code(404);
avant de définir le modèle pour s'assurer que l'en-tête est correct (ce qui est nettement plus rapide que lastatus_header( 404 );
fonction wordpress ). Si vous êtes préoccupé par le classement des pages, vous devez également mettre uneDisallow
règle dans votre robots.txt pour indiquer qu'il ne s'agit pas d'une ressource publique.Pourquoi ne créez-vous pas une page qui affiche un message d'erreur, puis redirigez-vous l'utilisateur vers cette page? Voici un moyen simple d'y parvenir:
Ouvrez le
404.php
fichier et ajoutez ces lignes en haut:Créez une page avec un
404 Page
modèle. Redirigez ensuite les utilisateurs:La raison pour laquelle vous devez utiliser une page pour la demande 404 est la suivante: dans WP, la page 404 est en fait une page qui n'existe pas , WP doit rechercher tout son contenu avant de renvoyer la page 404 et ce travail est un gaspillage de ressources. Utiliser une page préconfigurée qui pourrait vous aider à exécuter votre blog plus rapidement.
la source
http_response_code(404); exit();
. Si vous voulez une page, utilisez-laget_template_part( 404 );
avant de quitter. C'est aussi beaucoup plus rapide que n'importe quelle fonctionnalité wordpress.Vous pouvez écrire ce code dans le fichier 404.php dans le répertoire de thème actuellement utilisé (wp-content / themes /..../ 404.php) :
Ce code doit commencer au début du fichier (sans aucun caractère avant) .
Lien vers l'original: comment rediriger votre page 404 vers la page d'accueil dans WordPress
la source
Location: xxx
définit un en-tête 301, qui indique aux robots d'exploration qu'il existe réellement une ressource valide et tue votre classement lorsqu'ils déterminent qu'il n'y en a pas.J'avais une exigence similaire où je ne devais pas laisser les utilisateurs accéder à la page author.php en fonction du rôle d'un utilisateur. J'enregistre l'action template_redirect pour faire mes vérifications et rediriger vers la page 404 avant même que la page réelle ne soit chargée.
Enregistrement:
Gestionnaire:
Si vous avez choisi d'utiliser uniquement l'extrait de code suivant au milieu de la partie modèle, la page peut avoir déjà été rendue partiellement et vous n'êtes pas réellement redirigé vers une page 404. Il vaut donc mieux le faire dans l'
template_redirect
action -la source