web-dev-qa-db-fra.com

Comment rediriger toutes les 404 erreurs d'un type de message spécifique vers une autre URL?

J'ai un type de message personnalisé contenant des offres d'emploi, qui est très volatile. Les travaux sont fréquemment ajoutés et supprimés. Nos analyses montrent que de nombreuses erreurs d'analyse concernent les pages de détail des tâches non répertoriées.

La solution que j'ai proposée consiste à rediriger toutes les visites d'URL inexistantes dans le slug du CPT vers la vue d'ensemble des offres d'emploi, et j'aimerais automatiser cela.

Comment pourrais-je m'y prendre? Je cherche une solution qui le fasse très tôt et évite le plus possible les appels inutiles. (c'est-à-dire quelque chose de plus tôt que cela dans header.php, idéalement en tant qu'action)

Exemple:

  • mydomain.com/jobs/existingjob/ affiche la page de détail du travail
  • mydomain.com/jobs/nojobhere/ n'existe pas et lancerait un 404 mais serait redirigé vers mydomain.com/jobs/
2
lastfuture

Il semble que template_redirect soit aussi haut dans la chaîne d’action WordPress que vous pouvez aller tout en étant capable de détecter qu’une erreur 404 est générée. Cette action se déclenchera avant que les fichiers de modèle ne soient chargés, ainsi avant le chargement des ressources inutiles.

Vous pouvez essayer d'ajouter ceci dans votre fichier /wp-content/themes/yourtheme/functions.php pour réaliser une redirection dynamique pour tous les 404 qui surviennent lors de la visualisation de tâches uniques:

add_action( 'template_redirect', 'unlisted_jobs_redirect' );
function unlisted_jobs_redirect()
{
    // check if is a 404 error, and it's on your jobs custom post type
    if( is_404() && is_singular('your-job-custom-post-type') )
    {
        // then redirect to yourdomain.com/jobs/
        wp_redirect( home_url( '/jobs/' ) );
        exit();
    }
}
1
Ben HartLenn

S'il n'y a pas de page de ce type sur votre site, vous devez vous poser la question suivante: devrais-je vraiment supprimer cette page? Ou devrais-je simplement le rendre meilleur? Si vous décidez de vous assurer que vous envoyez l'en-tête HTTP approprié: un en-tête de 410 contenus supprimés.

En-têtes HTTP 404 et 410 La différence entre un en-tête 404 et 410 est simple: 404 signifie "contenu introuvable", 410 signifie "contenu supprimé" et est donc plus spécifique. Si une URL renvoie un 410, Google est beaucoup plus certain d'avoir supprimé l'URL volontairement et il devrait donc supprimer cette URL de son index. Cela signifie que cela ira beaucoup plus vite.

Vous pouvez utiliser le plugin Yoast SEO Premium, le module de redirection de ce plugin est capable de servir 410 en-têtes.

0
Aishan

Je n'ai pas le représentant à commenter la réponse de Ben HartLenn, et je sais que c'est un ancien post, mais pour éviter aux futurs utilisateurs de perdre du temps: is_singular ('post_type') ne fonctionnera pas sur une page de 404 pages. $ wp_query-> queried_object ne fonctionnera pas non plus.

Cela fonctionne:

add_action( 'template_redirect', 'unlisted_jobs_redirect' );
function unlisted_jobs_redirect(){
    //check for 404
    if( is_404()){
        global $wp_query;
        //check that wp has figured out post_type from the request
        //and it's the type you're looking for
        if( isset($wp_query->query['post_type']) && $wp_query->query['post_type'] == 'your-job-custom-post-type' ){
        // then redirect to yourdomain.com/jobs/
        wp_redirect( home_url( '/jobs/' ) );
        exit();
    }
}
0
pilotfryer