Deaktivieren Sie NUR die automatische Vervollständigung von URLs, nicht das gesamte kanonische URL-System


8

Ich habe einen Blog mit mehreren Seiten in einer Kategorie "Projekte", die wie folgt strukturiert / benannt sind:

  • / projects / project-2012
  • / projects / project-2013
  • / projekte / projekt-2014
  • / projects / project-2015

Wenn ein Benutzer URLs wie http://myblog.com/project oder sogar http://myblog.com/proje eingibt, wird er auf die Seite / projects / project-2012 umgeleitet . (Mit einem 301 dauerhaft bewegt!)

Ich möchte, dass WordPress URLs, die zu einer klar definierten Seite führen (z. B. http://myblog.com/?p=123 ), in die kanonische Form umwandelt. Ich möchte jedoch nur die automatische Vervollständigung der URL für "unklare" URLs deaktivieren kann auf mehrere Seiten verweisen.

Meine Frage ist: Wie kann ich das erreichen?


Ich habe auch recherchiert ...

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

  • Vor ungefähr vier Jahren tauchte so etwas im Wordpress-Bug-Tracker 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 es) Vielleicht auf der Suche nach einer der folgenden Seiten? ") wurden dort besprochen, das Ticket wurde am Ende geschlossen.

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


Diese zentrale Funktion zum Erraten von URLs bringt auch SEO und SEO-Tools durcheinander !!
Mau

Antworten:


11

Okay, nachdem ich ein bisschen 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-erraten.php), haben Sie ein nettes Plugin, das Sie aktivieren können, um die automatische Korrekturfunktion von Wordpress zu deaktivieren .

Um Ihnen die Mühe zu ersparen, habe ich dies tatsächlich getan und mein Plugin bei Wordpress.org eingereicht. Sobald es dort überprüft wurde, 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 Hack. Sobald die Funktionsanforderung in https://core.trac.wordpress.org/ticket/16557 tatsächlich implementiert ist, gibt es viel bessere Lösungen dafür sowie eine viel bessere Kontrolle darüber, wie das Raten tatsächlich durchgeführt werden sollte.


Ich wünschte, ich könnte dies dreimal verbessern ...
KalenGi

Inspirierte mich, als ich Probleme mit der Seitenumleitung hatte. Ich hatte vor remove_filter(). Aber jetzt nur einen bestimmten Fall umgehen, in dem ich Probleme habe. Nur für den Fall, dass sich jemand für mein Problem interessiert: wordpress.stackexchange.com/questions/307670/…
Parixit

funktioniert nicht mehr in v5 +
nodws

@nodws: Worauf beziehen Sie sich? Ich benutze mein Plugin mit dem Code-Snippet auf 5.2.2 und es funktioniert immer noch gut.
Hauke ​​P.

Oh, es war ein Konflikt mit YOASTs Weiterleitungen
nickt am

0

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

Aus praktischer Sicht sind Ihre besten Optionen:

  1. Handhabung der Umleitung manuell, bei template_redirect.
  2. redirect_canonicalEs ist nicht wünschenswert, die Umleitung als Hook zu verhindern, wenn das Ziel erreicht wurde.

In beiden Fällen müssen Sie die Logik entwickeln, die genau eine unerwünschte Weiterleitung bewirkt.


Huh, das ist unerwartet sehr unglücklich. :-( Meine Definition einer unerwünschten Weiterleitung ist ziemlich einfach: Jede URL, die nicht in genau ein Ziel aufgelöst werden kann (aber mehrere oder keine), ist unerwünscht und sollte zu einer 404 führen.
Hauke ​​P.

@HaukeP. Die dafür verantwortliche Logik ist Teil von redirect_guess_404_permalink()und macht keine solche Unterscheidung, sondern nimmt nur die erste Übereinstimmung, die SQL erzeugt :(
Rarst

Eigentlich habe ich selbst eine Lösung gefunden: wordpress.stackexchange.com/a/144970/51898
Hauke ​​P.

@HaukeP. Ich habe Sie ein bisschen über "genau ein Ziel" missverstanden, weil einige Fälle von Fuzzy-Matching technisch nur zu einem Match führen, aber es ist nicht dasselbe wie Fuzzy-Zeug im Allgemeinen loszuwerden :)
Rarst

Ja, während ich meinen letzten Kommentar schrieb, hielt ich für eine Sekunde inne, um noch einmal darüber nachzudenken, aus Angst, missverstanden zu werden. :) Es sieht also so aus, als hätte ich meinen Kommentar (und meine Frage) doch präziser schreiben sollen.
Hauke ​​P.
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.