Désactiver SEULEMENT la saisie automatique d'URL, pas le système d'URL canonique entier


8

J'ai un blog avec plusieurs pages dans une catégorie "projets" qui sont structurées / nommées comme ceci:

  • / projets / projet-2012
  • / projets / projet-2013
  • / projets / projet-2014
  • / projets / projet-2015

Lorsqu'un utilisateur entre des URL comme http://myblog.com/project ou même http://myblog.com/proje, il est redirigé vers la page / projects / project-2012 . (Avec un 301 déplacé en permanence!)

Bien que je souhaite que wordpress transforme les URL, ce qui donne une page clairement définie (par exemple, http://myblog.com/?p=123 ) en forme canonique, je souhaite désactiver uniquement la saisie automatique d'URL pour les URL "peu claires" qui peut pointer vers plusieurs pages.

Ma question est: comment puis-je y parvenir?


J'ai aussi fait quelques recherches ...

  • La réponse acceptée à la question Disable Wordpress URL auto complete désactive tout le système d'URL canonique. Ce n'est pas acceptable pour moi.

  • Il y a environ quatre ans, quelque chose comme ça est apparu sur le traqueur de bogues Wordpress: https://core.trac.wordpress.org/ticket/8948 Alors que de bonnes solutions (comme offrir une page "Nous n'avons pas trouvé votre URL. Mais étiez-vous vous cherchez peut-être une des pages suivantes? ") ont été discutées là-bas, le ticket a finalement été fermé.

  • EDIT: Il y a en fait un nouveau billet à https://core.trac.wordpress.org/ticket/16557 qui couvre exactement ce dont j'ai besoin. Il semble être ciblé pour la version 4.0. Et les commentaires de ticket contiennent également une solution (voir ci-dessous).


cette fonctionnalité de devinette URL de base gâche également avec les outils de référencement et de référencement !!
Mau

Réponses:


11

D'accord, après avoir cherché un peu plus, j'ai finalement trouvé une réponse à ma propre question cachée dans un commentaire de ce ticket de demande de fonctionnalité: https://core.trac.wordpress.org/ticket/16557 L'utilisateur nacin a suggéré d'utiliser ce code:

function remove_redirect_guess_404_permalink( $redirect_url ) {
    if ( is_404() )
        return false;
    return $redirect_url;
}

add_filter( 'redirect_canonical', 'remove_redirect_guess_404_permalink' );

Si vous ajoutez ceci à un nouveau fichier php de plugin (par exemple dans wp-content / plugins / disable-url-autocorrect-guessing.php), vous aurez un joli plugin que vous pouvez activer pour désactiver la fonction de "devinette" de correction automatique de Wordpress .

Afin de vous éviter les ennuis, j'ai fait cela et remis mon plugin sur Wordpress.org. Une fois qu'il y aura été examiné, vous devriez pouvoir le télécharger ici: https://wordpress.org/plugins/disable-url-autocorrect-guessing/


Bien qu'il s'agisse d'une solution de travail, le code suggéré est en quelque sorte un hack. Une fois que la demande de fonctionnalité dans https://core.trac.wordpress.org/ticket/16557 est réellement implémentée, il y aura de bien meilleures solutions pour cela ainsi qu'un bien meilleur contrôle sur la façon dont la devinette doit être effectuée.


J'aurais aimé pouvoir voter trois fois ...
KalenGi

Cela m'a inspiré car j'avais un problème de redirection paginée. J'avais l'intention de le faire remove_filter(). Mais maintenant en contournant uniquement les cas spécifiques où j'ai des problèmes. Juste au cas où quelqu'un s'intéresserait à mon problème: wordpress.stackexchange.com/questions/307670/…
Parixit le

ne fonctionne plus en v5 +
nodws

@nodws: De quoi parlez-vous? J'utilise mon plugin avec l'extrait de code sur 5.2.2 et cela fonctionne toujours bien.
Hauke ​​P.

Oh, c'était un conflit avec les redirections de
YOAST

0

Malheureusement redirect_canonical() 400 lignes de code (et continue de croître de version en version), ce qui n'est pas particulièrement structuré pour être contrôlé par le but. C'est tout ou rien qui ne peut pas être configuré de manière flexible.

D'un point de vue pratique, vos meilleures options sont:

  1. Gestion de la redirection manuellement, à template_redirect.
  2. redirect_canonicalIl n'est pas souhaitable d' empêcher la redirection en tant que hook si la cible qu'elle a créée.

Dans les deux cas, vous devrez développer la logique de ce qui rend exactement la redirection indésirable.


Huh, c'est étonnamment très malheureux. :-( Ma définition d'une redirection indésirable est assez simple: chaque URL qui ne peut pas être résolue avec exactement une cible (mais plusieurs ou aucune) est indésirable et devrait entraîner un 404.
Hauke ​​P.

@HaukeP. la logique responsable en fait partie redirect_guess_404_permalink()et ne fait pas une telle distinction, prend simplement la première correspondance que SQL produit :(
Rarst

En fait, j'ai trouvé une solution par moi-même: wordpress.stackexchange.com/a/144970/51898
Hauke ​​P.

@HaukeP. Je vous ai un peu mal compris "exactement une cible", car certains cas de correspondance floue se résoudront techniquement en une seule correspondance, mais ce n'est pas la même chose que de se débarrasser des choses floues en général :)
Rarst

Ouais, en fait, en écrivant mon dernier commentaire, je me suis arrêté une seconde pour réfléchir à nouveau dans la peur d'être mal compris. :) Il semble donc que j'aurais dû écrire mon commentaire (et ma question) plus précisément après tout.
Hauke ​​P.
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.