Blog Web & Design

Rediriger les pages 404 vers la bonne adresse avec WordPress

Rediriger les pages d'erreur 404 vers une nouvelle adresse

Dans cet article, vous allez découvrir comment régler les problèmes de pages existantes qui redirigent vers une page d’erreur 404 WordPress.

Ce bug wordpress arrive lorsque ayant changé l’adresse d’un article ou d’une page, votre wordpress affiche l’ancienne URL.

Qu’est-ce qu’une erreur 404 ?

En langage informatique, une page d’erreur 404 signifie que la page n’existe plus. C’est à dire que soit elle n’a jamais été crée, soit la page existe mais l’adresse (URL) n’est plus disponible. Par défaut, votre navigateur internet vous redirige vers une page de type erreur 404.

Dans WordPress, vous avez la possibilité de personnaliser cette page. En effet, en créant un fichier nommé 404.php à la racine de votre thème WordPress vous pouvez définir l’apparence de votre page d’erreur.

Il est également possible de contrôler le comportement de cette page, via le fichier functions.php de votre thème, en utilisant une condition if(is_404()){ ... }, c’est ce que je vous propose de faire ici.

Qu’est-ce qu’une redirection 301 ?

Il existe plusieurs types de redirections web, et la 301 indique au navigateur et aux moteurs de recherche que votre page est redirigée de façon permanente. Contrairement au code 302 qui indique une redirection temporaire.

La fonction de pour rediriger la page

Ce bout de code est à rajouter dans le fichier functions.php de votre thème wordpress :

/**
 * Rediriger les pages d'erreur 404 vers des pages existantes
 * Source : Thomas Dufranne - https://www.mistersize.com
 */
function themeprefix_redirect_404_to_search_result(){

  // si on est sur la page d'erreur 404 :
  if(is_404()){

    // Adresse saisie dans l'URL :
    $adress_slug = $_SERVER['REQUEST_URI'];

    // Récupération de la liste des posts
    $moved_pages_arguments = array(
      'name'        => $adress_slug,
      'post_type'   => 'post',
      'post_status' => 'publish',
      'numberposts' => 1
    );
    $moved_pages = get_posts($moved_pages_arguments);

    // si une page existe :
    if( $moved_pages ) :

      // on redirige en 301 :
      wp_redirect( get_the_permalink( $moved_pages[0]->ID ), 301 );
      die;

    endif;

  }

}
add_action( 'template_redirect', 'themeprefix_redirect_404_to_search_result' );

Explications du code de la redirection

Dans un premier temps, on englobe le code dans une condition (is_404) permettant de limiter le fonctionnement du code dans le seul cas où le visiteur atterrit sur une page d’erreur.

Une fois ceci fait, on récupère l’URL c’est à dire, l’adresse affichée dans le navigateur grâce à la globale PHP $_SERVER['REQUEST_URI']

Cette adresse va nous permettre de faire une requête à WordPress, via la fonction get_posts();
Notez que : Cette requette nevous affichera qu’un seul résultat, puisque dans les arguments nous avons indiqué 'numberposts' => 1

Si la recherche d’une correspondance est avérée, if( $moved_pages ) :, nous lançons la redirection vers cette nouvelle page, sans oublier d’indiquer que nous souhaitons la faire en 301 ce qui permet de na pas perdre le référencement par exemples.

J’espère que ce code vous aura aidé. N’hésitez pas à me dire en commentaire ou par e-mail si vous rencontrez des problèmes avec WordPress, je peux peut-être vous aider.

Dernière mise à jour le Auteur : Thomas Dufranne

Ce contenu vous a-t-il été utile ?

Merci pour votre avis !

Si vous pensez pouvoir aider d'autres personnes, pensez à partager le contenu

Merci pour votre avis !

Désolé que vous n'ayez pas trouvé votre réponse.

Je vous invite à me poser vos question par commentaire ou par e-mail !

Repondre

This site uses Akismet to reduce spam. Learn how your comment data is processed.