martes, 18 de diciembre de 2012

REDIRECCIONES EN WORDPRESS: TRUCOS Y PLUGINS


Las ultimas actualizaciones de WordPress han permitido a los desarrolladores personalizar sus sitios web muy rápidamente. Ahora Es cada vez mas sencillo actualizar las áreas de tu tema, sustituir o reemplazar los widgets, e incluso escribir tus propias funciones con PHP. La escalabilidad está creciendo muchísimo y un area importante es la creación de url permanentes que son óptimas para SEO.

Entender WP_Rewrite

Si estás familiarizado con mod_rewrite en los servidores de Apache entonces no vas a tener problemas con la sintaxis de reescritura de WordPress y con las expresiones regulares.
El sistema de redirecciones se sigue basando en .htacces pero todoas las reglas se codifican a través de PHP. En realidad, esto hace que el proceso sea un poco más fácil ya que tenemos más control sobre la escritura de nuestra propia URL. No esta mal echar una ojeada a http://codex.wordpress.org/Class_Reference/WP_Rewrite ya que tiene mucha información sobre el tema. Incluso hay pequeños ejemplos que pueden hacer referencia a hacer todo más fácil de entender. La mayoría del código se puede escribir directamente en el archivo functions.php de tu tema.
Contenido de $Wp_rewrite->Rules
Al declarar la clase $wp_rewrite como global, tenemos acceso a todos los datos internos. Cuando vas a agregar tus propias reglas de estos se añaden en un array() con el nombre $wp_rewrite->rules. Es importante recordar esta variable, ya que es probable que tengas que hacer referencia a los datos varias veces durante el desarrollo.
1<?php
2global $wp_rewrite;
3print_r($wp_rewrite->rules);
4?>
Incluyendo en anterior fragmento de código en el archivo page.php de tu tema, verás como salida los datos que contiene el array() con las reglas de redirección de $wp_rewrite->rules.  Se pueden observar las reglas de redirección con los archivos a los que hacen referencia.
Por ejemplo, podremos ver un redirección para las urls de las categorias
1[category/(.+?)/?$] => index.php?category_name=$matches[1]
La parte de la izquierda con los paréntesis es la regla de redirección de Apache por la que buscamos. Esta regla buscará las urls que empiecen con la cadena “category” seguido de cualquier cadena de caracteres. Si la url coincide con la regla el servidor conoce que tiene que referenciarse aindex.php?category_name=  y se le envía como variable el valor obtenido en la regla de redirección de Apache que hemos indicado al principio.

Configurando Enlaces permanentes


La clase $wp_rewrite tiene demasiado contenido y funcionalidad como para dedicarle un artículo entero, en éste articulo comentaré algunas técnicas y funcionalidades para usar esta clase.
Muchas propiedades se puede hacer referencia, por ejemplo con, $wp_rewrite->category_base o$wp_rewrite->author_base que se pueden usar para generar la estructura base para las URL de éstas páginas. Pero aparte de usar la configuración por defecto de WP también podemos crear nuestras propias reglas.

Sobreescribiendo la base de autor
Desde el dashboard, en el menú Ajustes > Enlaces permanentes, o del inglés Permalinks, se pueden resetear y configurar la base de las categorias o tags. Siembargo no hay ninguna opción para configurar o cambiar la base de los enlaces de autor.
Para ello podemos usar la función de WordPress add_rewrite_rule() que viene integrada en el codigo para agregar funcionalidad o configuración adicional. En caso que en vez de /author, que es la url base por defecto, queremos usar /autor, en español. También he incluido las redirecciones para las páginas de autor y los feeds RSS. Deberá añadir el siguiente fragmento de código al archivo functions.php de tu tema
01add_action( 'init''add_author_rules' );
02function add_author_rules() {
03    add_rewrite_rule(
04        "autor/([^/]+)/?",
05        "index.php?author_name=$matches[1]",
06        "top");
07     
08    add_rewrite_rule(
09    "autor/([^/]+)/page/?([0-9]{1,})/?",
10    "index.php?author_name=$matches[1]&paged=$matches[2]",
11    "top");
12     
13    add_rewrite_rule(
14    "autor/([^/]+)/(feed|rdf|rss|rss2|atom)/?",
15    "index.php?author_name=$matches[1]&feed=$matches[2]",
16    "top");
17         
18    add_rewrite_rule(
19    "autor/([^/]+)/feed/(feed|rdf|rss|rss2|atom)/?",
20    "index.php?author_name=$matches[1]&feed=$matches[2]",
21    "top");
22}
Url Base Autor usando Generate_rewrite_rules
Writing for this method we will again need the global $wp_rewrite class. I’ve then setup a new variable named $new_rules which contains an associative array of data. My example code below just rewrites for the basic author page section.
Para esta técnica necesitaremos la clase global $wp_rewrite. En este caso tenemos una nueva variable llamada $new_rules que contiene un array asociativo. En el ejemplo reescribiremos las urls para la página básica de autor.
1function generate_author_rewrite_rules() {
2  global $wp_rewrite;
3  $new_rules array(
4    "autor/([^/]+)/?" => "index.php?author_name=".$wp_rewrite->preg_index(1)
5  );
6  $wp_rewrite->rules = $new_rules $wp_rewrite->rules;
7}
Pero si queremos incluir multiples páginas o feeds RSS, tan sólo tendremos que incluir las reglas en el array.

El siguiente ejemplo tambien iría en functions.php de tu tema
01function generate_author_rewrite_rules() {
02  global $wp_rewrite;
03  $new_rules array(
04    "autor/([^/]+)/?" => "index.php?author_name=".$wp_rewrite->preg_index(1),
05    "autor/([^/]+)/page/?([0-9]{1,})/?" => "index.php?author_name=".$wp_rewrite->preg_index(1)."&paged=".$wp_rewrite->preg_index(2),
06    "autor/([^/]+)/(feed|rdf|rss|rss2|atom)/?" => "index.php?author_name=".$wp_rewrite->preg_index(1)."&feed=".$wp_rewrite->preg_index(2),
07    "autor/([^/]+)/feed/(feed|rdf|rss|rss2|atom)/?" => "index.php?author_name=".$wp_rewrite->preg_index(1)."&feed=".$wp_rewrite->preg_index(2)
08  );
09  $wp_rewrite->rules = $new_rules $wp_rewrite->rules;
10}
Nota: Para que los técnicas anteriores puedan funcionar correctamente se debe refrescar las reglas de redirección originales. Se tiene que hacer esto, siempre que se hagan cambios en estas funciones.
Refrescar o Flushing las reglas de redirección
Cuando se hace una actualización de las reglas de redirección en el código, los cambios no son inmediatos. Tienes que refrescar las reglas de redirecciones del .htaccess, para que tu nuevo código sea añadido. Sin embargo realizar esta llamada en cada página es algo que puede relentizar y lo mejor es hacer la redireccion a nivel de apache con .htaccess.
Un método para asegurarnos que nuestros cambios se guardan en .htaccess mediante la llamada a $wp_rewrite->flush_rules(); es acceder a la sección de enlaces permantes del panel de administración. Y darle al botón de guardar, esto actualizará todas las reglas del blog.

Usar Reglas que no son de WordPress

Dentro de la clase $wp_rewrite hay unos cuantos propiedades, una de ellas es $wp_rewrite->non_wp_rules que contiene un array de redirecciones que no tienen que no implican al archivo index.php
Esto es usado normalmente en el desarrollo de plugins. Puedes crear una url especifica, por ejemplo, /calendario/octubre-2012 gestionada desde el backen de la web a través del plugin /wp-content/plugins/calendario_plugin/index.php.

Hay otros usos de estos array asociativos para personlizar reglas de redireccionamiento, mas allá de los plugins, más detalle a continuación.
Enmascarar los archivos de tu tema
Con esta técnica podemos crear otras urls que llamen a nuestros archivos, css, js o imágenes. De manera que podemos cambiar la url por defecto de éstos recursos que se encuentran en /wp-content/themes/mi_tema/. Esto lo podemos hacer para crear urls más elegantes o evitar que vean el nombre de nuestro tema.
01add_action('generate_rewrite_rules''themes_dir_add_rewrites');
02
03function themes_dir_add_rewrites() {
04  $theme_name = next(explode('/themes/', get_stylesheet_directory()));
05
06  global $wp_rewrite;
07  $new_non_wp_rules array(
08    'css/(.*)'       => 'wp-content/themes/'$theme_name '/css/$1',
09    'js/(.*)'        => 'wp-content/themes/'$theme_name '/js/$1',
10    'http://cdn1.pedroventura.com/wordpress-urls-rewrite/(.*)'    => 'wp-content/themes/'.$theme_name '/http://cdn1.pedroventura.com/wordpress-urls-rewrite/$1',
11  );
12  $wp_rewrite->non_wp_rules += $new_non_wp_rules;
13}

Herramientas útiles

Este plugin tiene una configuración de reglas para hacer redirecciones a nuevas páginas. El plugin tiene su propio panel de control, donde puedes editar variables tales como la url base de autor, base para las páginas, e incluso escribir tus propias redirecciones en .htaccess para los más expertos.
Esto no es un plugin de WordPress, pero es una gran herramienta para tener en cuenta. Puedes copiar y pegar tus reglas de redireccionamiento y probarlas en tu web, sin necesidad de editar tu .htaccess. Este método esta bien para hacer debugin antes de hacer cambios en el .htaccess de produccion.

si te ha gustado haz click en la publicida para poder mantener la web
GRACIAS

Articulos relacionados por categorias