Inicio > Wordpress > Optimizar las url de los post de WordPress

Optimizar las url de los post de WordPress

En muchas ocasiones nuestros post de WordPress llevan caracteres especiales: ej. ¡Ya tenemos ganador! ¡Como correr mas rápido! Cuando tenemos estos títulos en nuestros posts podemos encontrarnos que el enlace no funciona por que en la url pone ¡como-correr-mas-rapido!

Estos errores no son culpa del WordPress sino del servidor de alojamiento, algunos Windows o con una configuración no compatible pueden generar este problema provocando que no solo no se vea nuestro post sino imposibilitando su modificación, la del post, el titulo o la url.

Para solucionar los problemas de post antiguos no nos queda mas remedio que sanear los títulos en la bbdd, entrando en wp_post y modificando el campo post_name.

Una vez solucionado el problema con las entradas anteriores hay que cambiar el código del wordpress para que no vuelva a pasar en las entradas nuevas para ello modificaremos en la carpeta wp_includes el archivo formatting.php. Buscaremos la función sanitize_title_with_dashes().

PHP
function sanitize_title_with_dashes($title) {
    $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);
    $title remove_accents($title);
    if (seems_utf8($title)) {
        if (function_exists('mb_strtolower')) {
            $title mb_strtolower($title'UTF-8');
        }
        $title utf8_uri_encode($title200);
    }
    $title strtolower($title);
    $title preg_replace('/&.+?;/'''$title); // kill entities
    $title str_replace('.''-'$title);
    $title preg_replace('/[^%a-z0-9 _-]/'''$title);
    $title preg_replace('/\s+/''-'$title);
    $title preg_replace('|-+|''-'$title);
    $title trim($title'-');
    return $title;
}

En esta función WordPress le envía el Title del post y le quita los acentos, cambia espacios por guiones y lo coloca como post_name que usará como url si así lo tenemos configurado.  Incluiremos el siguiente código para eliminar los caracteres no admitidos como url para algunos servidores.

 PHP
$special_chars = array("?", "[", "]", "/", "\\", "=", "<", ">", ":", ";", ",",
 "'", "\"", "&", "$", "#", "*", "(", ")", "|", "~", "`", "!", "{", "}");

$post_name = str_replace(' ', '-', str_replace($special_chars, '',
strtolower($post_name)));

Yo he colocado el codigo sobre el if, justo despeus de que se eliminen los acentos. Y con esto no deberia volver a daros problemas el blog.

  1. 6 octubre 2013 a las 16:31

    hola, tengo una pregunta, como hago para que en la url me acepte los caracteres de “$” y “!”

    • 20 enero 2014 a las 17:38

      Has de usar los códigos del caracter:
      $ -> %24
      ! -> %21
      @ ->%40

      es muy fácil dar con ellos, cualquier página de busqueda que refleje la busqueda por la url te la dará, prueba con google marca %y en la url encontrarasl a “query” google.com/…..q=%24….

      Saludos

  1. 21 octubre 2010 a las 22:08

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: