Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. Creative Coding

Uso de WordPress para el desarrollo de aplicaciones web: Características disponibles, Parte 6: Reescritura de URL (o rutas)

by
Read Time:10 minsLanguages:

Spanish (Español) translation by Esther (you can also view the original English article)

Una de las cosas más agradables de los frameworks modernos de desarrollo de aplicaciones web es que proporcionan una forma de generar rutas realmente limpias, o esquemas de URL, que se ajustan al modelo conceptual de cómo está estructurada la aplicación.

Por ejemplo, dado algún tipo de datos, digamos, un Individual (Individuo), puede ser capaz de realizar las siguientes acciones:

  • add (añadir)
  • update (actualizar)
  • delete (eliminar)

Y así sucesivamente.

Según la naturaleza de tu aplicación, es posible que puedas hacer más (como, por ejemplo, añadir un cónyuge), pero a los efectos de este post, las operaciones básicas del CRUD bastan para demostrarlo.

Para aquellos de ustedes que han estado siguiendo, hemos estado echando un vistazo a una variedad de características que WordPress ofrece como base para el desarrollo de aplicaciones. Al continuar este debate, es importante que echemos un vistazo a las API que están disponibles para que podamos personalizar las reglas de reescritura de WordPress.

Es probable que el usuario promedio esté familiarizado con la forma de cambiar el esquema de URL dentro del tablero de mandos de WordPress, que discutiremos brevemente para asegurarnos de que todos estamos en la misma página, sin embargo, hay muchas más capacidades disponibles para aquellos que entienden la reescritura de URL en WordPress.

De hecho, tenemos la capacidad de construir reglas de reescritura de URL para que coincidan y funcionen como las de los modernos frameworks basados en MVC.


Comprensión de las reglas de reescritura

Para asegurarnos de que todos estamos en la misma página, las reglas de reescritura pueden ser pensadas como la forma en que un cierto patrón es comparado con el servidor web para recuperar datos de la base de datos.

Por ejemplo, en la instalación estándar de WordPress, la estructura de permalink (enlace permante) por defecto es así:

Esta URL incluye un parámetro de cadena de consulta, a saber, el par de valores clave de p=123 que, en el contexto de WordPress, dice "retrieve the post with the ID of 123 (recuperar el mensaje con el ID de 123)".

Si miras con más detenimiento las opciones de la pantalla de Permalink Setting (Ajustes de enlaces permanentes), también verás una variedad de opciones:

PermalinksPermalinksPermalinks

Otro ejemplo de las reglas de reescritura que es probable que veas es lo que se conoce como "pretty permalinks (enlaces permanentes bonitos)" o, como se denomina en el tablero de WordPress, "Post Name (Nombre del post)".

En este formato, la URL se ve así:

A partir de aquí, la URL solicitada entra en el servidor web y luego, basándose en un conjunto de reglas, determina el ID del post que tiene ese título y lo devuelve al cliente solicitante (que sería el navegador).

Entre estos dos ejemplos, hay un principio básico en juego que demuestra exactamente lo que son las reglas de reescritura.

En resumen, las reglas de reescritura definen un conjunto de reglas en las que en el URL entrante se traduce a un formato que recupera la información de la base de datos para el cliente.

Por supuesto, esto plantea dos preguntas:

  1. ¿Cómo se generan las reglas de reescritura?
  2. Y, quizás más importante, ¿por qué son tan complicadas?

El negocio de reescribir las reglas

La razón por la que la reescritura de las reglas puede servir como un poco de desafío para los desarrolladores es porque se basan en expresiones regulares. Y hay una vieja cita sobre las expresiones regulares de Jamie Zawinski:

Algunas personas, cuando se enfrentan a un problema, piensan "Lo sé, usaré expresiones regulares". Ahora tienen dos problemas.

Divertido, pero cierto. Y es por eso que tratar con reglas de reescritura personalizadas en WordPress puede ser un gran desafío para muchos desarrolladores.

Lamentablemente, no podemos demostrar todas las variaciones o tipos de esquemas de URL que pueden ser creados o apoyados por reglas de reescritura, pero podemos echar un vistazo a un par de ejemplos prácticos que muestran cómo empezar y proporcionan una base o una guía de lo que necesitaríamos hacer en el trabajo futuro con nuestras aplicaciones.

Desechando reglas de reescritura

Una cosa que es importante señalar es que cuando se definen las reglas de reescritura, no tendrán un efecto inmediato, ya que se han desechado. Esto significa que necesitas borrar el viejo conjunto de reglas, para reemplazarlas por el nuevo conjunto de reglas.

Hay dos maneras de hacerlo:

  1. Puedes hacer clic en Save Changes (Guardar cambios) en el tablero de Permalink Settings (ajustes de enlaces permanentes). A pesar de que se seleccionará una opción, se utilizará el archivo functions.php que hayas definido en tu aplicación.
  2. Puedes hacer una llamada a $wp_rewrite->flush_rules(); y programáticamente ocuparte del problema.

Independientemente de la ruta que elijas, es importante recordar este paso porque cada vez que definas una nueva regla de reescritura, tendrás que eliminar las reglas antiguas.

¿Cómo funciona el Rewrite API (API de reescritura)?

Cuando se trata de escribir nuestras propias reglas de reescritura, es importante entender cómo funciona la API de reescritura.

Puede ser destilado en un proceso de cuatro pasos:

  1. Se solicita una URL del servidor web.
  2. Si el contenido existe en la URL solicitada, entonces el contenido será devuelto (puede ser una imagen, una fuente o lo que sea).
  3. Si el contenido no existe, entonces la solicitud será dirigida a index.php que coincidirá con el patrón del URL.
  4. El contenido será devuelto de WordPress al cliente solicitante.

Si te interesa ver la definición de las reglas de reescritura basadas en la configuración que tienes en el tablero de mandos de Permalink, mira el plugin Rewrite Rules Inspector.

Este plugin mostrará una lista de todas las reglas que están actualmente en vigor para que coincidan con los esquemas de URL especificados, con las expresiones regulares y las variables coincidentes contra index.php.

Rewrite Rules InspectorRewrite Rules InspectorRewrite Rules Inspector

¿Tiene sentido? Si no, veamos un par de ejemplos simples y prácticos.

Un ejemplo de reglas de reescritura

Dado que sabemos que los patrones serán emparejados y pasados a index.php, podemos aprovechar la función add_rewrite_rule para definir cómo funcionarán nuestras URLs personalizadas.

Un título corto para una identificación de post

Digamos que estamos viendo el primer post en el sistema, es decir, estamos viendo el post con el ID de 1.

En la mayoría de las instalaciones vanilla de WordPress, esto es Hello World (Hola Mundo) y la URL suele ser http://domain.com/hello-world o http://domain.com/?p=1 dependiendo de tu configuración de permalink (es decir, tu conjunto actual de reglas de reescritura).

Pero definamos una regla tal que http://domain.com/first también cargue el primer post en la base de datos:

Añadamos una regla más que nos permitirá cargar el segundo post en la base de datos. A saber, http://domain.com/?p=2.

Asumiendo que has leído la documentación de la regla add_rewrite, esto es bastante fácil de entender, ¿verdad?

En resumen, toma tres argumentos:

  • El primer argumento es una expresión regular para coincidir con la URL solicitada. En nuestro caso, estamos usando palabras simples.
  • El segundo argumento es el URL a buscar. De nuevo, en nuestro caso, estamos recuperando la primera y segunda entrada, respectivamente.
  • Finalmente, el último argumento es la prioridad, que puede ser "superior" o "inferior". Si se establece como "top", entonces esta regla se evaluará por encima de todas las demás reglas; sin embargo, si se establece como "bottom", entonces se evaluará en último lugar.

Ahora, estos ejemplos son básicos. No son suficientes para mostrarnos cómo establecer rutas personalizadas como las que hemos descrito anteriormente en este artículo. Para ello necesitamos echar un vistazo a algunas expresiones más complejas.

Importar notas acerca del desecho de reglas de reescritura

Pero antes de hacer eso, es importante notar que llamar a flush_rewrite_rules() como estamos haciendo arriba es en realidad una mala práctica. Funciona en el ejemplo anterior, pero en realidad puede ralentizar el tiempo de carga de un sitio.

De hecho, sólo necesita ser llamado cuando las reglas de reescritura cambian. Esto puede ocurrir cuando se activa un plugin, o puede cambiar cuando se activa un tema.

Sea cual sea el caso, asegúrate de enganchar bien las funciones para que las reglas de reescritura no se eliminen en cada carga de página, solo cuando las propias reglas de reescritura hayan cambiado.


Un enfoque más complicado para reescribir las reglas

Para introducir un conjunto más complicado de reglas de reescritura como las que detallamos anteriormente en este post de las operaciones del CRUD, es importante entender las dos funciones siguientes:

  • add_rewrite_tag permitirá a WordPress conocer las variables de cadenas de consulta personalizadas. Esto también se usa en conjunto con la siguiente función.
  • add_rewrite_rule, como se ha mencionado, nos permitirá añadir reglas de reescritura adicionales a WordPress (así como establecer su prioridad).

Ahora digamos que tenemos un tipo de post personalizado llamado Individual que representa a una persona en la aplicación. Entonces, digamos que el individuo también tiene los siguientes métodos y las correspondientes URLs disponibles:

  • allhttp://domain.com/individuals/
  • update: http://domain.com/individual/update/1 que se utiliza para actualizar la primera persona
  • suprimir: http://domain.com/individual/delete/1 que se utiliza para suprimir la primera persona

Así que el esquema es bastante simple, pero ¿cómo lo implementamos?

Primero, necesitamos definir las reglas de reescritura:

A continuación, necesitamos definir estas funciones personalizadas para cada individuo para que actualicen el registro adecuado en la base de datos cuando se les llame.

En este caso, definiremos dos funciones: una para actualizar el individuo y otra para eliminar el individuo. El siguiente código también asume que un poco de información va a estar contenida dentro del formulario que se envía desde el navegador.

Específicamente, asume que la identificación individual, nombre, apellido y otra información será enviada para actualizar al individuo.

Observa arriba que la primera función se engancha a la acción init y solo se dispara si el usuario no está conectado como administrador. Esto podría mejorarse aún más si se configura condicionalmente para que se cargue solo si viene de una página determinada; sin embargo, para este ejemplo, cumple su propósito.

A continuación, lee los comentarios del código de las funciones Update (Actualizar) y Delete (Borrar) para ver cómo deberían funcionar.

Por último, observa que las dos últimas funciones son simples ayudantes destinados a permitirnos escribir un código más limpio en la función inicial de enganche.

Un poco incompleto

Sé que este es un ejemplo un poco incompleto, pero para un artículo extenso, y un tema complejo, me he propuesto hacer lo mejor que pueda para mostrar la API de reescritura de WordPress, discutir las ventajas de su uso, y hablar de cómo se puede utilizar para crear rutas de URL más limpias.

La verdad es que sigue siendo un tema difícil y que se capta mejor a través de la aplicación. Sin embargo, este es otro componente de la aplicación WordPress que le permite servir de base para el desarrollo de aplicaciones web.


En seguida

Dicho esto, es hora de pasar al concepto de "caching".

Claro que hay muchos plugins de cacheo disponibles para WordPress, pero si eres un desarrollador, estás buscando construir un nivel de cacheo nativo, y estás buscando aprovechar las APIs de WordPress para hacerlo. Si ese es el caso, es importante que te familiarices con lo que está disponible y cómo hacerlo.

Dicho esto, a continuación centraremos nuestra atención en la API de Transients para que podamos manejar un poco de caching nativo por nuestra cuenta, y revisaremos cómo esto puede ayudar a los mecanismos de caching de terceros a hacer nuestras aplicaciones aún más rápidas.

Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.