Deaktivieren Sie NUR URL-Vervollständigung, nicht das gesamte kanonische URL-System

Ich habe einen Blog mit mehreren Seiten in einer Kategorie “Projekte”, die wie folgt strukturiert sind:

  • / Projekte / Projekt-2012
  • / Projekte / Projekt-2013
  • / Projekte / Projekt-2014
  • / Projekte / Projekt-2015

Wenn ein Benutzer URLs wie http://myblog.com/project oder sogar http://myblog.com/proje eingibt, wird er / sie zur Seite / projects / project-2012 weitergeleitet . (Mit einem 301 Moved Permanentely!)

Während ich möchte, dass WordPress URLs in einer klar definierten Seite (zB wie http://myblog.com/?p=123 ) in die kanonische Form umwandelt, möchte ich nur die URL-Vervollständigung für “unklare” URLs deaktivieren könnte auf mehrere Seiten verweisen.

Meine Frage ist: Wie kann ich das erreichen?


Ich habe auch etwas recherchiert …

  • Die akzeptierte Antwort auf die Frage WordPress Auto-Vervollständigung deaktivieren deaktiviert das gesamte kanonische URL-System. Das ist für mich nicht akzeptabel.

  • Vor ungefähr vier Jahren tauchte so etwas auf dem WordPress-Bugtracker auf: https://core.trac.wordpress.org/ticket/8948 Während einige gute Lösungen (wie das Anbieten einer Seite) “Wir haben Ihre URL nicht gefunden. Aber Sie waren vielleicht nach einer der folgenden Seiten gesucht? “) wurden dort besprochen, das Ticket wurde am Ende geschlossen.

  • EDIT: Es gibt tatsächlich ein neueres Ticket bei https://core.trac.wordpress.org/ticket/16557, das genau deckt, was ich brauche. Es scheint für die Version 4.0 ausgerichtet zu sein. Und die Ticketkommentare enthalten auch eine Lösung (siehe unten).

Solutions Collecting From Web of "Deaktivieren Sie NUR URL-Vervollständigung, nicht das gesamte kanonische URL-System"

Okay, nachdem ich ein wenig mehr gesucht hatte, fand ich endlich eine Antwort auf meine eigene Frage, die in einem Kommentar zu diesem Feature Request Ticket versteckt war: https://core.trac.wordpress.org/ticket/16557 Der Benutzer nacin schlug vor, diesen Code zu verwenden:

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' ); 

Wenn Sie dies zu einer neuen Plugin-PHP-Datei hinzufügen (zum Beispiel in wp-content / plugins / disable-url-autocorrect-rate.php), haben Sie ein nettes Plugin, das Sie aktivieren können, um WordPress ‘Autokorrektur- “Raten” -function zu deaktivieren .

Um Ihnen das Problem zu ersparen, habe ich das getan und mein Plugin bei WordPress.org abgegeben. Sobald es dort überprüft wird, sollten Sie es hier herunterladen können: https://wordpress.org/plugins/disable-url-autocorrect-guessing/


Während dies eine funktionierende Lösung ist, ist der vorgeschlagene Code ein bisschen ein Hack. Sobald die Feature-Anforderung in https://core.trac.wordpress.org/ticket/16557 tatsächlich implementiert ist, wird es viel bessere Lösungen dafür geben sowie viel bessere Kontrolle darüber, wie das Raten tatsächlich durchgeführt werden sollte.

Leider ist redirect_canonical() als 400 Codezeilen (und wächst von Release zu Release weiter), die nicht besonders strukturiert sind, um von einem bestimmten Zweck gesteuert zu werden. Es ist alles oder nichts, was nicht flexibel konfiguriert werden kann.

Aus praktischer Sicht sind Ihre besten Optionen:

  1. Redirect manuell bearbeiten, bei template_redirect .
  2. Redirect als redirect_canonical hook zu verhindern, wenn das Ziel erreicht wurde, ist nicht wünschenswert.

In jedem Fall müssen Sie die Logik dessen entwickeln, was unerwünschte Weiterleitung genau macht.