Como crear reglas de reescritura con la Rewrite API en PHP en WordPress

Contents

Introducción

La Rewrite API de WordPress permite mapear URLs amigables (pretty URLs) a consultas internas (query vars) de WordPress. Con ella puedes crear reglas avanzadas para rutas personalizadas, endpoints (como /ruta.json), paginación y cabeceras propias, integrando contenido dinámico sin tocar .htaccess manualmente. Este tutorial explica en detalle cómo crear reglas de reescritura con ejemplos prácticos en PHP, buenas prácticas, depuración y errores comunes.

Conceptos básicos

  • add_rewrite_rule(): Añade una regla de reescritura con un patrón regex y una query interna.
  • add_rewrite_tag(): Declara etiquetas de reescritura para poder usar variables personalizadas en las reglas.
  • add_rewrite_endpoint(): Añade endpoints para ampliar recursos de URL (por ejemplo, /mi-post/json/).
  • query_vars: Variables que WordPress reconoce en la query las variables personalizadas deben añadirse con un filtro.
  • flush_rewrite_rules(): Regenera las reglas de reescritura costoso, debe ejecutarse sólo en activación/desactivación.

Cómo funciona una regla

Una regla toma una expresión regular aplicada sobre la parte de path (tras el dominio), y la transforma en una query interna del estilo index.php?post_type=Xvar=Y. En el destino puedes usar matches[1], matches[2], etc. como referencia a grupos capturados por la regex.

Ejemplo práctico: plugin mínimo que añade una ruta y una plantilla

A continuación un ejemplo de plugin que: registra una variable personalizada, añade una regla para url tipo /tienda/producto-slug/, expone esa variable, y carga una plantilla personalizada cuando la variable existe. Se incluye el flush de reglas sólo en la activación.

lt?php
/
Plugin Name: Ejemplo Rewrite API - Tienda
Description: Añade ruta /tienda/slug/ y carga plantilla personalizada.
Version: 1.0
Author: Ejemplo
/

// 1) Registrar query var personalizada
add_filter(query_vars, function(vars) {
vars[] = producto_slug
return vars
})

// 2) Añadir regla de reescritura
add_action(init, function() {
// Regex: tienda/([a-z0-9-] )/?
add_rewrite_rule(
^tienda/([a-z0-9-] )/?



Acepto donaciones de BAT's mediante el navegador Brave :)



Deja una respuesta

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