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

Una de las cosas más interesantes de los marcos de desarrollo de aplicaciones web modernas es que proporcionan una forma de generar rutas realmente limpias (o esquemas de URL) que se corresponden con el modelo conceptual de cómo se estructura la aplicación..

Por ejemplo, dado algún tipo de datos, por ejemplo, un Individual-Es posible que pueda realizar las siguientes acciones:

  • añadir
  • actualizar
  • borrar

Y así.

Dependiendo de la naturaleza de su solicitud, puede hacer más (como, por ejemplo, agregar un cónyuge), pero a los efectos de este post, las operaciones CRUD básicas son suficientes para demostrar el punto.

Para aquellos de ustedes que nos han estado siguiendo, hemos analizado una variedad de características que WordPress ofrece como base para el desarrollo de aplicaciones. Al continuar con esta discusión, es importante que echemos un vistazo a las API disponibles para personalizar las reglas de reescritura de WordPress..

El usuario promedio probablemente esté familiarizado con la forma de cambiar el esquema de URL en el panel de WordPress, que analizaremos brevemente para asegurarnos de que todos estemos 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 marcos modernos basados ​​en MVC.


Entendiendo las reglas de reescritura

Para asegurarse de que todos estemos en la misma página, las reglas de reescritura se pueden considerar como la forma en que un determinado patrón se compara con el servidor web para recuperar datos de la base de datos.

Por ejemplo, en la instalación estándar de WordPress, la estructura predeterminada de enlace permanente es así:

http://dominio.com/?p=123

Esta URL incluye un parámetro de cadena de consulta, es decir, el par de valores clave de p = 123 que, en el contexto de WordPress, dice "recuperar la publicación con el ID de 123".

Si profundizas en las opciones de la Permalink Settings En la pantalla, también verás una variedad de opciones:

Otro ejemplo de las reglas de reescritura que probablemente veas son las que se conocen como "enlaces permanentes bonitos" o, como se menciona en el panel de WordPress, "Nombre del mensaje".

En este formato, la URL se ve así:

http://dominio.com/post-title/

Desde aquí, la URL solicitada entra en el servidor web y luego, en función de un conjunto de reglas, determina el ID de la publicación 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 qué reglas de reescritura son.

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

Por supuesto, esto plantea dos preguntas:

  1. Cómo se reescriben las reglas?
  2. Y, quizás más importante, ¿por qué son tan complicados??

El negocio de las reglas de reescritura

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

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

Divertido, pero cierto. Y eso es ¿Por qué tratar con reglas de reescritura personalizadas en WordPress puede ser un desafío para muchos desarrolladores?.

Desafortunadamente, no podemos demostrar cada variación o tipo de esquema de URL que se puede crear o admitir mediante reglas de reescritura, pero podemos echar un vistazo a un par de ejemplos prácticos que muestran cómo comenzar y proporcionar una base o una guía para Lo que tendríamos que hacer en un futuro trabajo con nuestras aplicaciones..

Reglas de Reescritura de Flushing

Una cosa que es importante tener en cuenta es que cuando define sus reglas de reescritura, no tendrán efecto de inmediato, ya que se han eliminado. Esto significa que necesita borrar el antiguo conjunto de reglas, para reemplazarlo con el nuevo conjunto de reglas.

Hay dos formas de hacer esto:

  1. Puede hacer clic en Guardar cambios en el Permalink Settingstablero. A pesar del hecho de que se seleccionará una opción, lo que haya definido en la aplicación funciones.php archivo será utilizado.
  2. Usted puede hacer una llamada a $ wp_rewrite-> flush_rules (); y encargarse programáticamente del problema.

Independientemente de la ruta que elija, es importante recordar este paso porque cada vez que defina una nueva regla de reescritura, deberá eliminar las reglas anteriores..

¿Cómo funciona la API de reescritura??

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

Puede ser destilado en un proceso de cuatro pasos:

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

Si está interesado en ver la definición de reglas de reescritura basadas en la configuración que tiene en el Enlace permanente panel de control, echa un vistazo al complemento Rewrite Rules Inspector.

Este complemento mostrará una lista de todas las reglas que se aplican actualmente para que coincidan con los esquemas URL especificados, junto con las expresiones regulares y las variables coincidentes con index.php.

¿Tener sentido? Si no es así, echemos un vistazo a un par de ejemplos sencillos 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 el add_rewrite_rule función para definir cómo funcionarán nuestras URL personalizadas.

Un título corto para una ID de publicación

Digamos que estamos viendo la primera publicación en el sistema, es decir, estamos viendo la publicación con el ID de 1.

En la mayoría de las instalaciones de WordPress de vainilla, esto es Hola Mundo y la URL es generalmente http://dominio.com/hello-world o http://dominio.com/?p=1 dependiendo de su configuración de enlace permanente (es decir, su conjunto actual de reglas de reescritura).

Pero definamos una regla tal que http://dominio.com/first También cargará la primera publicación en la base de datos:

 function example_add_rewrite_rules () add_rewrite_rule ('first', 'index.php? p = 1', 'top'); flush_rewrite_rules ();  add_action ('init', 'example_add_rewrite_rules');

Agreguemos una regla más que siga el ejemplo y nos permita cargar la segunda publicación en la base de datos. A saber, http://dominio.com/?p=2.

function example_add_rewrite_rules () add_rewrite_rule ('first', 'index.php? p = 1', 'top'); add_rewrite_rule ('second', 'index.php? p = 2', 'top'); flush_rewrite_rules ();  add_action ('init', 'example_add_rewrite_rules');

Suponiendo que haya leído la documentación de regla add_rewrite, Esto es bastante fácil de entender, ¿verdad??

En resumen, toma en tres argumentos:

  • El primer argumento es una expresión regular que coincide con la URL solicitada. En nuestro caso, estamos usando palabras simples..
  • El segundo argumento es la URL para obtener realmente. Nuevamente, en nuestro caso, estamos recuperando la primera y la segunda publicación, respectivamente..
  • Finalmente, el último argumento es la prioridad, que puede ser "arriba" o "abajo". Si se establece como "superior", entonces esta regla se evaluará sobre todas las demás reglas; sin embargo, si está "abajo", entonces será evaluado último.

Ahora, estos ejemplos son básicos. Esto no es suficiente para mostrarnos realmente cómo configurar rutas personalizadas como las que describimos anteriormente en este artículo. Para hacerlo necesitamos echar un vistazo a algunas expresiones más complejas..

Importar notas sobre las reglas de re-escritura de descarga

Pero antes de hacer eso, es importante tener en cuenta que las llamadas 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, solo es necesario llamarlo siempre que cambien las reglas de reescritura. Esto puede ocurrir cuando se activa un complemento, o puede cambiar cuando se activa un tema.

Cualquiera que sea el caso, asegúrese de enganchar correctamente sus funciones para que las reglas de reescritura no se eliminen en cada carga de página, solo cuando las 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 esta publicación de las operaciones de CRUD, es importante comprender las siguientes dos funciones:

  • add_rewrite_tag le permitirá a WordPress conocer las variables de cadena de consulta personalizadas. Esto también se utiliza junto con la siguiente función.
  • add_rewrite_rule, como se mencionó, nos permitirá agregar reglas de reescritura adicionales a WordPress (así como establecer su prioridad).

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

  • todos: http://dominio.com/individuals/
  • actualizar: http://dominio.com/individual/update/1 que se usa para actualizar la primera persona
  • borrarhttp://dominio.com/individual/delete/1 que se usa para borrar la primera persona

Así que el esquema es bastante simple, pero ¿cómo vamos a implementarlo??

Primero, necesitamos definir las reglas de reescritura:

 function example_add_rewrite_rules () // Defina la etiqueta para el ID individual add_rewrite_tag ('% individual_id%', '([0-9] *)'); // Defina las reglas para cada una de las personas add_rewrite_rule ('^ individual / update / ([0-9] *)', 'index.php? Individual = update & individual_id = $ matches [1]', 'top'); add_rewrite_rule ('^ individual / delete / ([0-9] *)', 'index.php? individual = delete & individual_id = $ matches [1]', 'top');  add_action ('init', 'example_add_rewrite_rules');

A continuación, debemos 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 Individual y uno para borrar el Individual. El siguiente código también supone que un poco de información se incluirá en el formulario que se envía desde el navegador..

Específicamente, se supone que la identificación individual, el nombre, el apellido y otra información se enviarán para actualizar la información individual..

 function example_process_individual ($ input) if (example_updating_user ()) example_update_individual ($ input);  else if ('true' == $ input ['delete_individual']) example_delete_individual ($ input ['individual_id']);  if (! is_admin ()) add_action ('init', 'example_process_individual'); function example_update_individual ($ input) / * La colección de $ input entrante de una forma asumida * que se usará para actualizar al usuario. * * Puede incluir información como la ID, el nombre, * el apellido, etc. * * Sobre el éxito, usar wp_redirect para volver a la página de inicio, o vuelva a cargar * la página para mostrar un error. * / function example_delete_individual ($ individual_id) / * Use la ID entrante para ubicar el registro individual y eliminarlo * de la base de datos. * * Sobre el éxito, usar wp_redirect para volver a la página de inicio, o vuelva a cargar * la página para mostrar un error. * / function example_updating_user () return 0 == strpos ($ _SERVER ['REQUEST_URI'], '/ individual / update');  function example_deleting_user () return 0 == strpos ($ _SERVER ['REQUEST_URI'], '/ individual / delete'); 

Observe arriba que la primera función está enganchada en el en eso acción y es solamente se activa si el usuario no ha iniciado sesión como administrador. Esto podría mejorarse además configurándolo condicionalmente para que se cargue solo si proviene de una página determinada; Sin embargo, para este ejemplo, cumple su propósito..

A continuación, lea los comentarios del código para el Actualizar y el Borrar Funciones para ver cómo deberían funcionar..

Finalmente, tenga en cuenta que las dos funciones finales son simples ayudantes que nos permiten escribir un código más limpio en la función inicial enganchada.

Un poco incompleto

Sé que este es un ejemplo un tanto incompleto, pero para un artículo extenso y un tema complejo, mi objetivo es hacer lo mejor que pueda para mostrar la API de WordPress Rewrite, discutir las ventajas de usarlo y hablar sobre ¿Cómo se puede utilizar para crear rutas URL más limpias?.

La verdad es que sigue siendo un tema un tanto desafiante y es el que mejor se comprende a través de la implementación. No obstante, este es otro componente más de la aplicación WordPress que le permite servir como base para el desarrollo de aplicaciones web..


Hasta la próxima

Dicho todo esto, es hora de pasar al concepto de almacenamiento en caché.

Claro, hay muchos complementos de almacenamiento en caché que están disponibles para WordPress, pero si eres un desarrollador, estás buscando construir un nivel de almacenamiento en caché nativo, y estás buscando aprovechar las API de WordPress para hacerlo. Si ese es el caso, es importante familiarizarse con lo que está disponible y cómo hacerlo..

Así que con eso dicho, a continuación vamos a centrar nuestra atención en el API de transitorios para que podamos manejar un poco de almacenamiento en caché nativo por nuestra cuenta, y revisar cómo esto puede ayudar a los mecanismos de almacenamiento en caché de terceros a hacer que nuestras aplicaciones sean aún más rápidas.