Les erreurs 404 indiquent une page introuvable. C’est une erreur plus ou moins fréquente qui indique simplement que le document recherché n’est plus disponible par l’adresse renseignée dans la barre d’adresse. Cela peut être causé par une erreur d’écriture d’un lien, ou par un déplacement de fichier dont le lien pour y accéder n’aurait pas été mis à jour (soit sur le site, soit sur le moteur de recherche qui n’a pas encore eu le temps de mettre à jour sa base de données).

C’est assez typique des CMS pour lesquels les contenus peuvent beaucoup plus facilement être mis à jour, les pages et articles peuvent très rapidement être renommés ou supprimés, les erreurs 404 sont donc vite arrivées.

WordPress propose dans son template par défaut une page 404.php très basique.
Beaucoup de Webdesigners s’amusent à transformer cette page en un élément graphique attrayant et original, il y a même des sites spécialisés qui référencent ce type de page sur critère de l’originalité.

En dehors de l’aspect graphique, cette page peut facilement se voir attribuer une fonction d’alerte qui va permettre au Webmaster d’être prévenu de son affichage.

Illustration d'un erreur 404

Ce billet n’est pas vraiment digne d’un tutoriel puisque je n’ai fait que vous présenter le code que j’ai monté pour un site en cours de réalisation avec quelques commentaires en guise d’explications.
Cest aussi pour cela que la catégorie Ressources lui est associée.

Je vous présente donc un code php à placer dans la page 404.php de WordPress, ou à exécuter/afficher sur la condition is_404()

<?php 
	// informations concernant votre site
	$adminemail = get_bloginfo('admin_email'); //le mail du webmaster
	$website = get_bloginfo('url'); //l'url du site
	$websitename = get_bloginfo('name'); // le nom du site
	
	// on commence à composer notre futur paragraphe
	$output_p = '<p>Vous ';

	// si le visiteur a tapé l'adresse manuellement
	if (!isset($_SERVER['HTTP_REFERER'])) :
		$output_p .= 'avez essayé de rejoindre la page ';
		$output_bonux = 'Tout n\'est pas perdu !'; //optionnel

	// si le visiteur a cliqué sur un lien (referer)
	elseif (isset($_SERVER['HTTP_REFERER'])) :
		$output_p .= 'avez cliqué un lien pour rejoindre la page ';

		$failuremess = "Un utilisateur a essayé d'aller à la page $website".$_SERVER['REQUEST_URI']." et a reçu une erreur 404 (page not found). ";
		$failuremess .= "Il venait de l'url : ".$_SERVER['HTTP_REFERER'];
	
		$mailing = mail($adminemail, "Lien mort ? : ".$_SERVER['REQUEST_URI'], $failuremess, "From: $websitename <noreply@$website>");
	
		//si le mail est bien envoyé
		if($mailing) : 
			$output_bonux .= "Un administrateur a été prévenu du problème par email aussi. Il fera le nécessaire le plus rapidement possible.";
			
		//s'il ne l'est pas
		else : 
			$output_bonux .= "L'administrateur du site aurait dû être prévenu mais le mail n'a pas pu lui parvenir.<br />";
			$output_bonux .= "Si vous souhaitez lui signaler le problème, merci de copier le message suivant :<br />";
			$output_bonux .= "<code>Referer : ".$_SERVER['HTTP_REFERER']."<br />";
			$output_bonux .= "Request : $website".$_SERVER['REQUEST_URI']."</code>";
		endif;
		
	endif;

	// on termine notre paragraphe, 
	// il s'agit de la partie qui apparait de toute manière
	$output_p .= ': <br /><code class="url">'.$website.$_SERVER['REQUEST_URI'].'</code><br />'; 
	$output_p .= ' et elle semble ne pas exister.<br />'; 
	$output_p .= $output_bonux.'<br />'; 
	$output_p .= 'Vous pouvez revenir en arrière et essayer à nouveau, ou effectuer une recherche :</p>'; 
	
	// affichons le texte
	echo $output_p;
	
	// affichons le formulaire de recherche maintenant
	get_search_form();
	
	/* ou utilisez une fonction "moins wordpress" comme
	include(TEMPLATEPATH . "/searchform.php"); 
	*/ 
?>

Bien entendu ce code est très minimaliste et peut largement être optimisé avec quelques contrôles ou informations supplémentaires.
Il n’est pas destiné uniquement à WordPress puisqu’il vous suffit de remplacer les fonctions prédéfinies (blog_info() ou get_search_form()) par vos fonctions/variables personnelles.

Le code PHP est plutôt basique, mais s’il vous faut des informations complémentaires n’hésitez pas à me le faire savoir.

J’espère que cela vous servira.

Bon code !

Liens utiles et sources :
http://codex.wordpress.org/fr:Marqueurs_conditionnels
La condition is_404() de WordPress
Design de pages 404