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 :) |