Sous wordpress, il est parfois necessaire de rediriger une page inexistante (page 404) vers une autre page.
Besoin d’un spécialiste WordPress pour votre projet ? Contactez-moi
En général cela est utilisé lorsque l’URL d’une page à été modifiée, ce qui à pour résultat d’afficher une page avec une erreur 404, qui est la page indiquant qu’aucun contenu WordPress n’a été trouvé.
Pour résoudre ce problème, dans un soucis d’optimisation SEO, on a donc besoin d’indiquer au navigateur la nouvelle adresse.
Ces lignes sont à rajouter dans le fichier functions.php de votre thème WordPress :
1. Une première fonction pour retouver l’adresse utilisateur
La fonction PHP qui va nous aider à trouver l’adresse actuelle sur laquelle se trouve le visiteur.
// get current URL
function wp458_get_current_URL() {
$current_url = 'http';
$server_https = $_SERVER["HTTPS"];
$server_name = $_SERVER["SERVER_NAME"];
$server_port = $_SERVER["SERVER_PORT"];
$request_uri = $_SERVER["REQUEST_URI"];
if ($server_https == "on") $current_url .= "s";
$current_url .= "://";
if ($server_port != "80") $current_url .= $server_name . ":" . $server_port . $request_uri;
else $current_url .= $server_name . $request_uri;
return $current_url;
}
C’est une fonction PHP classique, vous retourant l’URL de destination du visiteur
2. La fonction de redirection WordPress
// Template Redirect
add_action( 'template_redirect', 'wp458_custom_redirect', 1 );
function wp458_custom_redirect() {
// si c'est une 404
if(is_404()){
$thislink = wp458_get_current_URL(); // L'adresse actuelle
$sitelink = get_bloginfo('url'); // Adresse du site
if($thislink == $sitelink . '/wordpress/'){
wp_redirect( $sitelink . '/tag/wordpress/' );
die;
}
}
}
Cette fonction utilise le système de redirection de WordPress à savoir wp_redirect, qu’on utilise seulement dans la condition où la page serait de type 404 grâce à is_404().
Attention le Hook « Template_redirect » est très important ici car il se lance avant le chargement de la page. Cela évite notamment les ereurs « Headers already sent » en PHP.
Si vous avez des questions ou une idée pour améliorer ce code, n’hésitez pas à me contacter.
