web-dev-qa-db-fra.com

Désactivez SEULEMENT l'URL complète, et non le système d'URL complet

J'ai un blog avec plusieurs pages dans certaines catégories de "projets" structurés/nommés comme ceci:

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

Lorsqu'un utilisateur entre des URL telles que http://myblog.com/project ou même http://myblog.com/proje il/elle est redirigé vers la page / projects/project-2012. (Avec un 301 déplacé de façon permanente!)

Alors que je veux que wordpress transforme les URL en une page clairement définie (par exemple, comme http://myblog.com/?p=123) dans la forme canonique, je souhaite désactiver uniquement le Complétion automatique des URL pour les URL "peu claires" pouvant pointer vers plusieurs pages.

Ma question est: comment puis-je accomplir cela?


J'ai aussi fait des recherches ...

  • La réponse acceptée à la question Désactiver l’achèvement automatique de l’URL de Wordpress désactive l’ensemble du système d’URL canonique. Ce n'est pas acceptable pour moi.

  • Il y a environ quatre ans, quelque chose comme cela 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 est-ce que vous cherchiez peut-être une des pages suivantes? ") Ont été discutées là-bas, le ticket a été fermé à la fin.

  • EDIT: Il existe actuellement un nouveau ticket sur 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).

8
Hauke P.

Ok, 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é de utilisez 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-supposeing.php), vous obtiendrez un plugin Nice que vous pourrez activer pour désactiver la fonctionnalité "deviner" de Wordpress .

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


Bien que ce soit une solution de travail, le code suggéré est un peu 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 meilleures solutions pour cela ainsi qu'un contrôle bien plus précis sur la manière dont l'estimation doit être effectuée. .

10
Hauke P.

Malheureusement, redirect_canonical() est constitué de plus de 400 lignes de code (et continue de croître d’une publication à l’autre), qui n’est pas particulièrement structuré pour être contrôlé par un objectif précis. C'est tout ou rien qui ne peut pas être configuré de manière flexible.

Du point de vue pratique, vos meilleures options sont:

  1. Gestion manuelle de la redirection, à template_redirect.
  2. Empêcher la redirection en tant que hook redirect_canonical si la cible qu’il a définie n’est pas souhaitable.

Dans les deux cas, vous devrez développer la logique de what exactement fait une redirection indésirable.

0
Rarst