Rediriger la page restreinte vers 404

19

Existe-t-il un moyen d’afficher une page 404 si l’utilisateur actuellement connecté ne dispose pas des autorisations nécessaires pour afficher la page? Je cherche une méthode PHP, quelque chose comme

if( !current_user_can('administrator') ) { show_404(); exit(); }

J'ai envisagé d'utiliser une redirection, mais j'aimerais conserver l'URL identique.

    
posée Evan Yeung 04.08.2011 - 08:01
la source

4 réponses

47

J'ai pu afficher une erreur 404 en utilisant le code suivant dans mon en-tête.

<?php
  global $wp_query;
  $wp_query->set_404();
  status_header( 404 );
  get_template_part( 404 ); exit();
?>

Pour le décomposer:
$wp_query->set_404() : dit au wp_query qu'il s'agit d'un 404, cela change le titre
status_header() : envoie un en-tête HTTP 404
get_template_part() : affiche le modèle 404

    
réponse donnée Evan Yeung 28.08.2011 - 16:40
la source
2

Pourquoi ne créez-vous pas une page qui affiche un message d'erreur, puis redirigez l'utilisateur vers cette page? Voici un moyen simple d'y parvenir:

Ouvrez le fichier 404.php et ajoutez ces lignes en haut:

/**
 * Template Name: 404 Page
 */

Créez une page avec 404 Page template. Puis redirigez les utilisateurs:

if ( !current_user_can('administrator') ) {
    $404_page = get_permalink( $404_page_id );
    wp_redirect( $404_page );
    exit();
}

La raison pour laquelle vous devez utiliser une page pour la requête 404 est la suivante: dans WP 404, la page est une page qui n'existe pas , WP doit rechercher tout son contenu avant de retourner la page 404 et que le travail est un gaspillage de ressources. Utiliser une page préconfigurée qui pourrait vous aider à exécuter votre blog plus rapidement.

    
réponse donnée Anh Tran 04.08.2011 - 08:39
la source
0

Vous pouvez écrire ce code dans le fichier 404.php du répertoire de thèmes réellement utilisé (wp-content / themes /..../ 404.php) :

<?php
header("HTTP/1.1 301 Moved Permanently");
header("Location: ".get_bloginfo('url'));
exit();
?>

Ce code doit commencer au début du fichier (sans aucun caractère auparavant) .

Lien vers l'original: Comment rediriger votre page 404 vers la page d'accueil dans WordPress

    
réponse donnée Jan Čejka 05.06.2017 - 16:39
la source
0

J'avais une exigence similaire: 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 effectuer mes vérifications et rediriger vers la page 404 avant même que la page réelle ne soit chargée. .

Inscription:

add_action( 'template_redirect', [ $this, 'handle_inactive_users']);

Gestionnaire:

public function handle_inactive_users() {
    global $wp_query;
    if ( $wp_query->is_author() ) {
        $user = $wp_query->get_queried_object();
        if ( is_a( $user, \WP_User::class ) && $user->has_cap( 'inactive' ) ) {
            $wp_query->set_404();
            status_header( 404 );
            get_template_part( 404 );
            exit();
        }
    }
}

Si vous avez choisi d'utiliser uniquement l'extrait de code suivant au milieu d'une partie de modèle, la page a peut-être déjà été rendue partiellement et vous n'êtes pas redirigé vers une page 404. Il vaut donc mieux le faire dans l'action template_redirect -

$wp_query->set_404();
status_header( 404 );
get_template_part( 404 );
exit();
    
réponse donnée Kalyan 26.09.2017 - 18:52
la source

Lire d'autres questions sur les étiquettes