¿Cómo aumentar el límite de caracteres para el nombre de publicación de 200?

2

Tengo el nombre de la publicación en tailandés que usa el carácter UTF-8 . Muchos de ellos se codifican en muy largo en ASCII, por ejemplo. การ หลีก เลี่ยง ข้อ าด ทั้ง -8- ใน ชีวิต การ แต่งงาน

He cambiado el tipo de "post_name" usando phpMyAdmin a VARCHAR(1000) y la clasificación a utf8_unicode_ci .

Sin embargo, en mi editor de fondo de WordPress, el nombre de la publicación anterior todavía se corta automáticamente a วิธี วิธีาร หลีก เลี่ยง ข้อ ผิ cuando intento guardar la URL.

Hay un complemento que eleva el límite de caracteres, pero está en tailandés, que no puedo leer.

¿Alguna idea?

    
pregunta ericn 07.03.2013 - 09:50

1 respuesta

5

Sucede porque cuando guardas una publicación, WordPress llama a Función sanitize_title para sanear tu título. Esta función aplica el filtro sanitize_title .

Uno de los ganchos principales para el filtro sanitize_title es % La función sanitize_title_with_dashes , que verifica el título en formato utf8 llamando a la función seems_utf8 y si el título tiene el formato utf8, la función call utf8_uri_encode función.

La función

utf8_uri_encode recibe dos argumentos: $utf8_string y $length . El primero es su título y el segundo argumento es la longitud, que el título no debe desbordar.

La función

sanitize_title_with_dashes pasa su título con un límite de 200 caracteres. Entonces, si desea cambiar el límite, debe cambiar el enlace estándar para el filtro sanitize_title . Aquí llegamos a una solución un poco sucia, pero sin embargo debería ayudarlo:

// 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;
}

Como puede ver, usamos completamente la misma función sanitize_title_with_dashes con un cambio: en lugar de pasar 200 , pasamos 1000 como límite para el título.

    
respondido por el Eugene Manuilov 07.03.2013 - 10:23

Lea otras preguntas en las etiquetas