web-dev-qa-db-fra.com

Comment créer des pages d'erreur personnalisées 401, 403 et 500?

Lorsqu'une erreur 404 est rencontrée, un fichier de modèle 404.php peut être utilisé pour afficher un message d'erreur personnalisé. Ceci est documenté dans l’article Hiérarchie de modèles .

Mon objectif est de créer des pages d'erreur personnalisées pour les erreurs 401, 403 et 500. J'ai essayé de créer des fichiers 401.php, 403.php et 500.php dans le répertoire de mon thème, mais cela ne fonctionne pas.

Comment créer des pages d'erreur personnalisées 401, 403 et 500 dans WordPress?

26
henrywright

Les pages d'erreur sont servies via .HTACCESS. Si vous utilisez Apache, vous utiliseriez la directive ErrorDocument et y ajouteriez le statut et l'URL.

Cela ressemblerait donc à ceci dans votre fichier .htaccess:

ErrorDocument 401 http://yourwebsite.com/error-401
ErrorDocument 403 http://yourwebsite.com/error-403
ErrorDocument 500 http://yourwebsite.com/error-500

Vous pouvez utiliser la fonction suivante ci-dessous. Cela ajoutera dynamiquement ce qui est nécessaire au fichier HTACCESS pour vous ou vous pouvez le faire manuellement.

1. Ajouter des pages:

Vous devez ensuite accéder à votre tableau de bord et créer les pages comme n'importe quelle page normale ("Tableau de bord"> "Pages"> "Nouveau"). Ils peuvent être intitulés à votre guise, assurez-vous que le slug est identique à celui décrit dans la fonction ci-dessous (Slug: error-401, error-403, error-404, error-500). Vous pouvez également utiliser un modèle de page pour créer la mise en page et le style de votre choix pour ces pages spécifiques. Suivez WordPress Codex instructions pour cela.

2. Ajouter une fonction:

// Create Custom Error Pages in WordPress using HTACCESS
function royal_custom_error_pages() {

    // Get HTACCESS path & dynamic website url
    $htaccess_file = '.htaccess';
    $website_url = get_bloginfo('url').'/';

    // Check & prevent writing error pages more than once
    $check_file = file_get_contents($htaccess_file);
    $this_string = '# BEGIN WordPress Error Pages';

    if( strpos( $check_file, $this_string ) === false) {

    // Setup Error page locations dynamically
    $error_pages .= PHP_EOL. PHP_EOL . '# BEGIN WordPress Error Pages'. PHP_EOL. PHP_EOL;
    $error_pages .= 'ErrorDocument 401 '.$website_url.'error-401'.PHP_EOL;
    $error_pages .= 'ErrorDocument 403 '.$website_url.'error-403'.PHP_EOL;
    $error_pages .= 'ErrorDocument 404 '.$website_url.'error-404'.PHP_EOL;
    $error_pages .= 'ErrorDocument 500 '.$website_url.'error-500'.PHP_EOL;
    $error_pages .= PHP_EOL. '# END WordPress Error Pages'. PHP_EOL;

    // Write the error page locations to HTACCESS
    $htaccess = fopen( $htaccess_file, 'a+');
    fwrite( $htaccess, $error_pages );
    fclose($htaccess);

    }
}

add_action('init','royal_custom_error_pages'); // This will run the function everytime, not ideal!

// register_activation_hook( __FILE__, 'royal_custom_error_pages' ); // Using a plugin, runs only once!

NB !! NOTES SUR LA FONCTION CI-DESSUS

Lorsque vous déplacez votre site Web ou modifiez la structure de l'URL

La chose à retenir avec la fonction ci-dessus est que bien qu'il vérifie si les directives ErrorDocument existent déjà avant de les écrire dans votre fichier HTACCESS, il ne réécrira pas les directives ErrorDocument si vous modifiez ou déplacez votre blog afin de refléter les emplacements de page mis à jour. Vous devez d'abord supprimer les directives ErrorDocument existantes dans votre fichier HTACCESS, puis réexécuter cette fonction pour créer les nouvelles directives.

crochet correct pour activer la fonction une seule fois

L'autre chose à noter est cette fonction, en utilisant l'action init s'exécutera à chaque chargement de vos pages, ce qui est super inutile et inutile. Je suggérerais donc de l'ajouter à un plugin et d'utiliser le register_activation_hook plutôt pour qu'il ne soit déclenché qu'une fois à l'activation du plugin.

Autorisations de fichier

De plus, il est impératif que votre fichier .htaccess soit accessible en écriture lorsque vous utilisez la fonction ci-dessus. Assurez-vous donc qu'il dispose des autorisations de fichier appropriées, du type CHMOD777.

14
Matt Royal