Redirecciones en WordPress: Consejos y plugins

Redirecciones en WordPress: Consejos 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.

<?php
global $wp_rewrite;
print_r($wp_rewrite->rules);
?>

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


[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 a index.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

add_action( 'init', 'add_author_rules' );
function add_author_rules() {
    add_rewrite_rule(
        "autor/([^/]+)/?",
        "index.php?author_name=$matches[1]",
        "top");

    add_rewrite_rule(
	"autor/([^/]+)/page/?([0-9]{1,})/?",
	"index.php?author_name=$matches[1]&paged=$matches[2]",
	"top");

    add_rewrite_rule(
	"autor/([^/]+)/(feed|rdf|rss|rss2|atom)/?",
	"index.php?author_name=$matches[1]&feed=$matches[2]",
	"top");

    add_rewrite_rule(
	"autor/([^/]+)/feed/(feed|rdf|rss|rss2|atom)/?",
	"index.php?author_name=$matches[1]&feed=$matches[2]",
	"top");
}

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.

function generate_author_rewrite_rules() {
  global $wp_rewrite;
  $new_rules = array(
    "autor/([^/]+)/?" => "index.php?author_name=".$wp_rewrite->preg_index(1)
  );
  $wp_rewrite->rules = $new_rules + $wp_rewrite->rules;
}

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

function generate_author_rewrite_rules() {
  global $wp_rewrite;
  $new_rules = array(
    "autor/([^/]+)/?" => "index.php?author_name=".$wp_rewrite->preg_index(1),
	"autor/([^/]+)/page/?([0-9]{1,})/?" => "index.php?author_name=".$wp_rewrite->preg_index(1)."&paged=".$wp_rewrite->preg_index(2),
	"autor/([^/]+)/(feed|rdf|rss|rss2|atom)/?" => "index.php?author_name=".$wp_rewrite->preg_index(1)."&feed=".$wp_rewrite->preg_index(2),
	"autor/([^/]+)/feed/(feed|rdf|rss|rss2|atom)/?" => "index.php?author_name=".$wp_rewrite->preg_index(1)."&feed=".$wp_rewrite->preg_index(2)
  );
  $wp_rewrite->rules = $new_rules + $wp_rewrite->rules;
}

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.

add_action('generate_rewrite_rules', 'themes_dir_add_rewrites');

function themes_dir_add_rewrites() {
  $theme_name = next(explode('/themes/', get_stylesheet_directory()));

  global $wp_rewrite;
  $new_non_wp_rules = array(
    'css/(.*)'       => 'wp-content/themes/'. $theme_name . '/css/$1',
    'js/(.*)'        => 'wp-content/themes/'. $theme_name . '/js/$1',
    'http://cdn1.pedroventura.com/wordpress-urls-rewrite/(.*)'    => 'wp-content/themes/'. $theme_name . '/http://cdn1.pedroventura.com/wordpress-urls-rewrite/$1',
  );
  $wp_rewrite->non_wp_rules += $new_non_wp_rules;
}

Herramientas útiles

WP Htaccess Control

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.

Rewrite Rule Tester

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.

Tags de búsquedas:

$wp_rewrite añadir una regla,rediccionar tags wordpress,redireccion url wordpress,redireccion worpress en base de datos,redireccionamiento en wordpress,redireccionamiento tags wordpress,redireccionar a una pagina de php en un plugins wordpress,redireccionar a una pagina movil con wordpress,redireccionar archivos pdf en wordpress,redireccionar imagen wp-content,redirecciones en wordpress,redireciones en facebook com,redirigir tags wordpress,variable redireccionamiento imagenes wordpress,que es mejor redirect en htaccess o pluggin wordpress

Noticias relacionadas »

1 comentario en “Redirecciones en WordPress: Consejos y plugins

  1. Luismi
    / Responder

    Hola y gracias por este articulo, me sirvio de mucha ayuda!!
    Ahora se me plantea una situacion que no consigo resolver, puedes ayudarme?
    El caso es: Una instalacion wordpress con url amigables “nombre de entrada”, se añadió una plantilla de página para usar una variable pasada por url en una parte codificada a medida de tal manera que queda asi: http://dominio.com/nombrepagina/?nombre=valor . Como ves esta url esta a medias entre “amigable” por el “nombrepagina, y no por el paso de la variable. ¿Como puedo añadir una regla para conseguir que pueda interpretarse: http://dominio.com/nombrepagina/valor ??<

    Saludos y gracias!!

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Invertir en criptomonedas: »

 

Cómo comprar bitcoin

Invertir y comprar Bitcoin y otras altcoins es más fácil de lo que crees.

1) Si sólo quieres comprar Bitcoin, Ethereum o Litecoin como inversión, tu opción es Coinbase

2) Si quieres probar con otras criptomonedas tu opción es Binance

3) Cualquier duda escríbeme con total libertad al formulario de contacto para resolver dudas: https://www.pedroventura.com/contacto/

¡Comparte este artículo! »

  • Irene (20 horas)
    I used www.zerobounce.net and it is an amazing platform for…
  • Felipe Albornoz (2 días)
    Agradecido. Saludos.
  • Joel (2 semanas)
    Este grupo es buenísimo hay personas de todo el mundo…
  • Citricus (2 semanas)
    Análisis muy buenos y detallados: Crypto Trading Campus https://t.me/cryptotradingcampus
  • Vane (2 meses)
    Hola muy buena información, en lo personal mino con Javascript…
  • Gabriel Roncancio (2 meses)
    Hola Pedro, gracias por compartir. Tu artículo me dió algunas…

Suscríbete al newsletter »

Proporciona tu correo electrónico a continuación y recibe las últimas noticias! Funciona con Feedburner de Google

Archivo »

Leer entrada anterior
Enviar tweets automáticamente en PHP con la API OAuth de Twitter y un Cron job

Desde hace aproximadamente un mes que vengo usando la API OAuth de Twitter https://dev.twitter.com/docs/api/1.1. Para cualquier técnico o programador que...

Cerrar