Wie kann das Zeichenlimit für Post-Name 200 erhöht werden?

Ich habe Post-Name in Thai, die UTF-8 Zeichen verwendet. Viele von ihnen kodieren im ASCII-Format in superlang, zB ทั้ง การ หลีก เลี่ยง ผิด พลาด ทั้ง -8- ใน ชีวิต การ แต่งงาน

Ich habe den Typ von “post_name” mit phpMyAdmin zu VARCHAR(1000) und Kollation zu utf8_unicode_ci .

In meinem WordPress-Backend-Editor wird der oben genannte Post-Name jedoch immer noch auf “วิธี การ หลีก เลี่ยง ข้อ cut” gekürzt, wenn ich versuche, die URL zu speichern.

Es gibt dieses Plugin, das die Zeichengrenze hebt, aber es ist in Thai, die ich nicht lesen kann.

Irgendwelche Ideen?

Solutions Collecting From Web of "Wie kann das Zeichenlimit für Post-Name 200 erhöht werden?"

Es passiert, weil WordPress beim Speichern eines Beitrags die function sanitize_title aufruft, um Ihren Titel zu bereinigen. Diese function wendet den Filter ” sanitize_title .

Einer der core-Hooks für den Filter ” seems_utf8 function ” seems_utf8 , die den Titel im utf8-Format überprüft, indem er die function ” utf8_uri_encode . Wenn der Titel das Format utf8 hat, ruft die function die function utf8_uri_encode .

utf8_uri_encode function utf8_uri_encode empfängt zwei Argumente: $utf8_string und $length . Der erste ist Ihr Titel und das zweite Argument ist die Länge, bei der der Titel nicht überlaufen sollte.

sanitize_title_with_dashes function sanitize_title_with_dashes übergibt Ihren Titel mit einer Länge von 200 Zeichen. Wenn Sie also das Limit ändern möchten, müssen Sie den Standard-Hook für den Filter ” sanitize_title ändern. Hier kommen wir zu einer etwas schmutzigen Lösung, aber wie auch immer es Ihnen helfen sollte:

 // first of all lets remove standard hook remove_filter( 'sanitize_title', 'sanitize_title_with_dashes' ); // add our custom hook add_filter( 'sanitize_title', 'wpse8170_sanitize_title_with_dashes', 10, 3 ); function wpse8170_sanitize_title_with_dashes( $title, $raw_title = '', $context = 'display' ) { $title = strip_tags($title); // Preserve escaped octets. $title = preg_replace('|%([a-fA-F0-9][a-fA-F0-9])|', '---$1---', $title); // Remove percent signs that are not part of an octet. $title = str_replace('%', '', $title); // Restore octets. $title = preg_replace('|---([a-fA-F0-9][a-fA-F0-9])---|', '%$1', $title); if (seems_utf8($title)) { if (function_exists('mb_strtolower')) { $title = mb_strtolower($title, 'UTF-8'); } $title = utf8_uri_encode($title, 1000); // < --- here is the trick! } $title = strtolower($title); $title = preg_replace('/&.+?;/', '', $title); // kill entities $title = str_replace('.', '-', $title); if ( 'save' == $context ) { // Convert nbsp, ndash and mdash to hyphens $title = str_replace( array( '%c2%a0', '%e2%80%93', '%e2%80%94' ), '-', $title ); // Strip these characters entirely $title = str_replace( array( // iexcl and iquest '%c2%a1', '%c2%bf', // angle quotes '%c2%ab', '%c2%bb', '%e2%80%b9', '%e2%80%ba', // curly quotes '%e2%80%98', '%e2%80%99', '%e2%80%9c', '%e2%80%9d', '%e2%80%9a', '%e2%80%9b', '%e2%80%9e', '%e2%80%9f', // copy, reg, deg, hellip and trade '%c2%a9', '%c2%ae', '%c2%b0', '%e2%80%a6', '%e2%84%a2', // grave accent, acute accent, macron, caron '%cc%80', '%cc%81', '%cc%84', '%cc%8c', ), '', $title ); // Convert times to x $title = str_replace( '%c3%97', 'x', $title ); } $title = preg_replace('/[^%a-z0-9 _-]/', '', $title); $title = preg_replace('/\s+/', '-', $title); $title = preg_replace('|-+|', '-', $title); $title = trim($title, '-'); return $title; } 

Wie Sie sehen können, verwenden wir die selbe function " sanitize_title_with_dashes mit einer einzigen Änderung: Anstatt 200 , geben wir 1000 als Grenzwert für den Titel an.