Integración WordPress
Sincroniza el catálogo de contenido de un sitio WordPress — artículos, categorías, etiquetas y URL — sin instalar ningún plugin de membresía. Qué va detrás del muro se decide en PayWL, no en WordPress.
Funcionalidades
| Feature | Descripción |
|---|---|
| Sync de contenido | Título, slug, URL, categorías y etiquetas de cada post publicado |
| Push casi en tiempo real | Snippet PHP que notifica a PayWL al publicar, editar o despublicar un post |
| Sondeo de respaldo | Cron interno cada 5 min, por si el snippet falla o no se instaló |
| Sincronización inicial | Trae de una vez todo el catálogo histórico del sitio |
| Autenticación opcional | Basic Auth (WP Application Passwords) o Bearer Token, si la API REST del cliente está protegida |
| Decisión de paywall | Se marca por artículo en PayWL (Override de Regla) — WordPress no necesita ningún campo "premium" |
Paso 1: Configurar el CMS
En Super Admin → [tenant] → CMS:
| Campo | Valor |
|---|---|
| Proveedor | WordPress |
| API URL | La URL base del sitio, sin /wp-json (ej. https://tudominio.com) |
| API Token | Vacío si el contenido es público (caso normal) — ver siguiente sección si no |
| Content Type | posts (default, salvo que uses un custom post type) |
Categorías y etiquetas quedan habilitadas por defecto — WordPress siempre expone wp/v2/categories y wp/v2/tags con esos nombres fijos, a diferencia de Strapi donde el nombre de la taxonomía es configurable.
¿API REST protegida?
Por defecto se lee contenido público sin ningún token. Si el sitio restringió su API REST, completa API Token y elige el tipo de autenticación:
| Tipo | Cuándo usarlo | Formato del token |
|---|---|---|
| Basic Auth (default) | WP Application Passwords — nativo desde WordPress 5.6, sin plugin adicional (Usuarios → Perfil → Contraseñas de aplicación) | usuario:xxxx xxxx xxxx xxxx |
| Bearer Token | Un plugin de auth por token/JWT (ej. "JWT Authentication for WP-API") | El token tal cual lo emite el plugin |
Paso 2: Generar el Webhook Secret
En la misma pestaña CMS, sección Webhook, clic en Generar y guarda el secreto — no se puede recuperar después, solo regenerar.
Paso 3: Instalar el snippet de notificación
En WordPress, vía el plugin Code Snippets (gratuito, repositorio oficial de plugins), crea uno nuevo con:
add_action('transition_post_status', function ($new_status, $old_status, $post) {
if ($post->post_type !== 'post') {
return;
}
if ($new_status === 'publish') {
$event = ($old_status === 'publish') ? 'post.update' : 'post.publish';
} elseif ($old_status === 'publish') {
$event = 'post.trash'; // Estaba público y deja de estarlo
} else {
return; // Nunca estuvo público — nada que sincronizar
}
wp_remote_post('https://ENGINE_URL/webhooks/cms/wordpress-sync', [
'blocking' => false,
'timeout' => 1,
'headers' => [
'Content-Type' => 'application/json',
'x-tenant-id' => 'TENANT_ID',
'x-wp-webhook-secret' => 'WEBHOOK_SECRET',
],
'body' => wp_json_encode([
'event' => $event,
'post_id' => $post->ID,
'post_type' => $post->post_type,
]),
]);
}, 10, 3);
Reemplaza ENGINE_URL, TENANT_ID (visible en Super Admin) y WEBHOOK_SECRET (del Paso 2), y activa el snippet en todo el sitio.
Paso 4: Sincronización inicial del catálogo completo
Mismo mecanismo genérico que ya usa Strapi — no es específico de WordPress:
- En el dashboard del tenant, ve a Contenido → Artículos
- Clic en Sincronizar
- Se pagina todo
wp/v2/postsen el fondo (100 por página, con reintento automático), con progreso en vivo
Es idempotente — puedes volver a correrla cuando quieras.
Paso 5: Marcar qué va detrás del muro
WordPress no tiene ningún campo "premium" — todo llega como contenido abierto. En Contenido → Artículos, abre el artículo y usa el selector de Override de Regla (HARD, METERED, o sin marcar para dejarlo abierto). Aplica de inmediato, sin tocar WordPress.
Flujo de Sincronización
¿Cómo se sincronizan las categorías?
No hay un paso aparte para "traer categorías" — viajan incluidas en cada post (sin una llamada extra a wp/v2/categories por post). Cada vez que un post se sincroniza:
- Sus categorías de WordPress se guardan como slugs en el artículo
- Si un slug es nuevo, PayWL crea automáticamente la categoría en el catálogo — con el slug como nombre, sin ninguna regla asignada (queda abierta hasta que un admin la configure)
- Un admin configura después, por categoría, el tipo de regla y si es prioritaria sobre las demás, desde Contenido → Categorías
La jerarquía de categorías de WordPress (padre/hija) no se preserva — se tratan como una lista plana de slugs, igual que con Strapi.
Preguntas frecuentes
¿Qué pasa si el snippet falla o se desinstala?
El sondeo de respaldo sigue sincronizando los cambios — hay más latencia (hasta 5 min), pero ningún cambio se pierde.
¿Se puede sincronizar page además de post?
Sí — ajusta el filtro del snippet y el campo Content Type en el dashboard.
¿El contenido en borrador o privado se sincroniza?
No — solo contenido publicado. Un post que pasa de publicado a borrador/papelera se elimina del catálogo de PayWL.