Gibt es eine maximale Schneckenlänge?

14

Ein Kunde hat gerade einen Beitrag mit einem sehr langen Slug (90 Zeichen), keinen Sonderzeichen (außer Bindestrichen) usw. erstellt.

Wann immer auf den Link zu diesem Beitrag geklickt wurde, einschließlich der Links "Vorschau" oder "Diesen Beitrag anzeigen" vom Admin-Backend, wurde ein 404 generiert.

Sobald wir die Schnecke manuell zugeschnitten hatten, funktionierte alles wie erwartet. Ist das ein "Feature" oder ein "Bug"?

EDIT: Ein Hinweis für alle, die über DB-Limits sprechen.

Wenn ich das DB-Feldlimit erreichen würde, würde der Slug selbst abgeschnitten. Denken Sie eine Sekunde darüber nach. Bei den meisten WP-Installationen lautet wp_posts.post_name VARCHAR (200). Nehmen wir also an, jemand tippt einen Titel mit> 200 Zeichen ein. Was geschieht? Der Slug wird auf 200 Zeichen gekürzt und in wp_posts.post_name gespeichert. Es ist nicht so, als würde jemand den vollständigen Titel des Beitrags in die Adressleiste des Browsers eingeben und die Leerzeichen durch Bindestriche ersetzen, oder? Die URL wird von WordPress generiert, und die URL wird aus der Tabelle wp_posts.post_name abgerufen und einfach in das Attribut href des Ankertags eingefügt. Es wird also keine Ungleichheit geben. Die ganze DB-Sache ist ein roter Hering.

In jedem Fall ist der betreffende Slug nur 90 Zeichen lang, hat also nichts mit DB-Limits zu tun.

Gibt es bekannte Einschränkungen beim Umschreiben?

Tom Auger
quelle
1
Sie können ein kostenloses Tool wie MySQL Workbench verwenden, um den Datentyp (und die maximale Länge, falls vorhanden) eines WordPress-Felds zu überprüfen, wie in der entsprechenden WordPress-Tabelle / -Spalte definiert
Jordi Cabot,

Antworten:

11

Aufgrund der Tabellenstruktur von wp_posts beträgt die Länge der Spalte post_name (die Spalte für Slugs) 200 Zeichen.

Eugene Manuilov
quelle
1
@TomAuger & Eugene - können Sie das Problem bestätigen, da Tom sagt, dass die Schnecke 90 Zeichen hatte. Mir ist bewusst, dass das Limit bei 200 liegt, aber dies zählt nicht die Home-URL, oder?
Brasofilo
@ Eugene, genau. 200 Zeichen. Mein Slug war genau 90 Zeichen, also erreichen wir nicht das DB-Limit.
Tom Auger
3

Ich vermute, es gibt selbst keine Begrenzung, aber die Eigenschaft des Feldes in der Datenbank für Schnecken ist möglicherweise auf eine maximale Länge festgelegt.

Überprüfen Sie also die Datenbank!

Fredrik Weiland
quelle
@Der, der abstimmte: Die Antwort ist richtig . Deshalb habe ich neu bewertet.
Kaiser
0

Wahrscheinlich war das Problem überhaupt nicht direkt mit WordPress / Datenbank verbunden ...

Aber die Länge der URL überschritt 255 Zeichen (und nicht alle Webbrowser mögen das).

Was hier passierte, war möglicherweise eine URL mit mehr als 255 Zeichen, die beim Öffnen durch die Adressleiste des Browsers abgeschnitten wurde, wodurch ein fehlerhafter Permalink abgerufen wurde, der zu einer 4o4 führte.

Angenommen, die maximale Butzenlänge ist:

255 - die Länge von (Protokoll + FQDN + Permalink-Struktur) ...

  • basierend auf dem harten Limit eines Browsers.

Es darf aber nicht länger als 200 Zeichen sein ...

  • basierend auf der Feldgröße von post_name.

Auch wenn in diesem speziellen Fall etwas anderes die 4o4 verursacht haben könnte.

Es hätte auch ein Zeichen sein können, das nicht richtig url_encoded war. Die Gründe für 4o4s sind endlos ... jemals als fehlerhafter Cluster auf der Festplatte oder als fehlerhaftes RAM-Modul angesehen? :)

Martin Zeitler
quelle
Die GUID ist nicht die URL. Es sieht einfach so aus, wird aber nicht zum Lesen einer Anfrage verwendet. Wenn Sie WordPress von einer Domain in eine andere verschieben, wird die GUID nicht geändert. Siehe core.trac.wordpress.org/ticket/6492 und core.trac.wordpress.org/ticket/10857 .
fuxia
Ähm, zu was anderem als Identifikationszwecken sollte dann eine eindeutige ID verwendet werden? Ich meine, die Frage ist im Grunde: Was ist der Grund, warum eine 4o4 in diesem Fall geworfen wird?
Martin Zeitler
Der 404 und die GUID hängen nicht zusammen, denke ich. WordPress verwendet die GUID einfach nicht, wenn es nach einem Beitrag sucht, der mit einer URL übereinstimmt.
Fuxia
Denken Sie, Sie haben Recht damit ... post_name und GUID können als Quelle des Problems ausgeschlossen werden - was übrig bleibt, sind Permalinks und Neuschreibungen. Ohne Apache-Logfiles oder irgendetwas ist dies nur eine Vermutung;)
Martin Zeitler
@syslogic Ich denke, umschreiben ist wahrscheinlich die Ursache und trägt weitere Untersuchungen. Die URL, einschließlich des http: // -Teils, war noch unter 128 Zeichen, sodass die URL-Länge meines Erachtens nicht auf ein festes Browser-Limit beschränkt ist.
Tom Auger