Lorsque le visiteur tente d’accéder à une page que WordPress ne peut trouver, une page spéciale est affichée. Il s’agit de la page 404, du nom de l’erreur HTTP provoquée par une page inexistante.
Nous verrons dans cet article comment profiter de cette page 404.
Le visiteur peut se trouver désorienté lorsque la page 404 ne fournit pas assez d’informations. De plus, vous pouvez profiter de cette page pour vous prévenir par mail que les visiteurs cherchent une page spécifique. L’erreur peut provenir d’un lien qui n’a pas été adapté lors d’une modification ou suppression d’un contenu (article, page, fichier media).
Les marqueurs conditionnels peuvent vous aider, en ajoutant quelques tests sur la page 404.
Procédure pour modifier la page 404
Dans l’interface d’administration de WordPress, cliquez sur « Apparence », puis « Editeur ».
Sélectionnez parmi les modèles (templates) « Modèle pour l’erreur 404 (404.php) ».
Voici un exemple, basé sur le thème « Twenty fifteen » :
<?php /** * The template for displaying 404 pages (not found) * * @package WordPress * @subpackage Twenty_Fifteen * @since Twenty Fifteen 1.0 */ get_header(); ?> <div id="primary" class="content-area"> <main id="main" class="site-main" role="main"> <section class="error-404 not-found"> <header class="page-header"> <h1 class="page-title"><?php _e( 'Oops! That page can’t be found.', 'twentyfifteen' ); ?></h1> </header><!-- .page-header --> <div class="page-content"> <p><?php _e( 'It looks like nothing was found at this location. Maybe try a search?', 'twentyfifteen' ); ?></p> <?php // some variables for the script to use // if you have some reason to change these, do. but wordpress can handle it $adminemail = get_bloginfo( 'admin_email' ); // the administrator email address, according to wordpress $website = home_url(); // gets your blog's url from wordpress $websitename = get_bloginfo( 'name' ); // sets the blog's name, according to wordpress $url = esc_html( $_SERVER['REQUEST_URI'] ); if ( ! wp_get_referer() ) { // politely blames the user for all the problems they caused $text = 'Vous avez essayé de joindre '; // starts assembling an output paragraph $casemessage = 'Tout n\'est pas perdu !'; } else { // this will help the user find what they want, and email me of a bad link $text = 'Vous avez cliqué sur un lien vers '; // now the message says You clicked a link to... // setup a message to be sent to me $failuremess = 'Un visiteur a demandé la page ' . $website . $url; $failuremess .= ', mais une erreur 404 est survenue.<br />'; $failuremess .= 'Origine de la demande : ' . wp_get_referer() . '<br />'; mail( $adminemail, '404 sur ' . $url, $failuremess, 'From: ' . get_bloginfo( 'name' ) . ' <noreply@' . $website . '>' ); // email you about problem $casemessage = 'Un administrateur a été alerté du problème.';// set a friendly message } $text .= $website . $url; echo '<p>'; echo $text.'et cela n\'existe pas.<br />'; echo $casemessage.'<br />Vous pouvez tenter de revenir en arrière ou utiliser la recherche :<br />': get_search_form(); ?> </div><!-- .page-content --> </section><!-- .error-404 --> </main><!-- .site-main --> </div><!-- .content-area --> <?php get_footer(); ?>
Ce code sert simplement d’exemple rapide et ne devrait pas être utilisé tel quel. Par exemple, au lieu de placer les message en français, il faudrait définir un fichier de traduction et y faire appel, si l’aspect multilingue est nécessaire :
_e( 'My string key', 'my_language_file_name' );