VM Sync Bridge sincroniza contenidos entre dos sitios WordPress (por ejemplo, desarrollo → producción o staging ↔ producción) usando el mismo plugin en ambos.
Soporta páginas, entradas y CPT, taxonomías, metadatos (incluyendo Elementor: _elementor_data
, _elementor_css
), usuarios/autores (mapeo), y medios (subida/dedupe por hash).
Incluye reemplazo seguro de dominios (dev → prod) incluso dentro de JSON de Elementor y campos serializados, barra de progreso en la UI, reintentos, logs y WP-CLI.
¿Cómo funciona (flujo técnico)?
-
Emisor selecciona qué sincronizar (un post, lote o automático al guardar).
-
Serializa el contenido (post + meta + taxonomías + adjuntos), normaliza ID/SLUG y aplica reemplazo de URL (dev → prod).
-
Envía un payload firmado (HMAC) al Receptor por REST:
/wp-json/vm-sync/v1/push
. -
El Receptor valida firma/permiso/IP, resuelve colisiones por:
-
external_uuid
(ID externo persistente) -
o por
slug + post_type
.
-
-
Crea/actualiza el recurso, descarga medios si faltan (dedupe por SHA1/MD5), re-escribe rutas locales y confirma estado al Emisor.
-
El Emisor actualiza la barra de progreso y registra log (éxitos/errores, tiempos y difs básicas).
Resolución de conflictos: por defecto “last-write-wins” con comparación de modified_gmt
. Opcional: bloquear si el destino es más reciente.
Requisitos
-
WordPress 5.8+, PHP 7.4+.
-
Instalar el plugin en ambos sitios.
-
Permitir llamadas REST entre ambos (sin WAF que bloquee JSON).
-
wp-cron
activo si usas reintentos en segundo plano.
Configuración rápida (paso a paso)
1) Instalar en ambos sitios
-
Sube/activa el plugin en Origen (Emisor) y Destino (Receptor).
2) Configurar el Receptor (sitio destino)
En Ajustes → VM Sync Bridge → Receptor:
-
Estado receptor: ✅ Activado.
-
Clave secreta (Token compartido): genera una clave larga (32+ chars).
-
Permisos mínimos:
manage_options
(recomendado) o un rol específico. -
Whitelist IP (opcional): IP del Emisor para endurecer seguridad.
-
Política de conflictos:
last-write-wins
obloquear si destino más nuevo
. -
Política de medios:
reutilizar si hash coincide
,descargar si no existe
. -
(Opcional) Prefijo/espacio de nombres para
external_uuid
si recibes de varios orígenes.
Prueba de salud: pulsa “Probar endpoint receptor” para ver
pong
, hora del servidor y versión.
3) Configurar el Emisor (sitio origen)
En Ajustes → VM Sync Bridge → Emisor:
-
URL del Receptor:
https://tusitio-destino.com
. -
Token compartido: pega el del Receptor.
-
Reemplazo de dominios:
-
Buscar:
https://dev.tusitio.com
-
Reemplazar por:
https://www.tusitio.com
-
-
Qué sincronizar: checkboxes por post types y taxonomías.
-
Mapeos:
-
Estados:
draft → draft
,publish → publish
(configurable). -
Autores: por email (si no existe, crea o asigna a uno por defecto).
-
Categorías/Tags: por slug; si no existe, crea.
-
-
Elementor: activar “Analizar JSON y reemplazar URLs en
_elementor_data
”. -
Automatización:
-
Sincronizar al guardar
(hook ensave_post
) -
o enviar manual (botón)
-
o lotes (por fechas/IDs).
-
-
WP-CLI (opcional): habilitar.
4) Handshake
Desde el Emisor, pulsa “Probar conexión”. Debe responder con:
-
ok: true
, versión del receptor, reloj del servidor y firma validada.
5) Primer envío de prueba
Entra a una página/entrada → pulsa “Sincronizar ahora”.
Observa la barra de progreso, y revisa en el Receptor que el contenido aparece con medios, meta y Elementor correctos.
Modos de uso
-
Desde el editor: botón “Sincronizar ahora” (post único).
-
Acción masiva en listados: selecciona varios y “Enviar al receptor”.
-
Lotes por filtro: por rango de fechas, tipo, estado o taxonomías.
-
Auto-sync al guardar: ideal en staging hacia producción.
-
WP-CLI (si lo activas):
Qué sincroniza (detalle)
-
Post básico: título, contenido, extracto, slug, estado, fecha/autor.
-
Metadatos: todos los meta salvo una lista de exclusión (definible).
-
Elementor:
_elementor_data
(JSON) y_elementor_css
(re-gen si procede). -
Taxonomías: categorías, etiquetas y tax personalizadas (por slug).
-
Medios: adjuntos del post; dedupe por hash para evitar duplicados.
-
Campos serializados: reemplazo seguro (busca/rehace serialización).
-
GUID: no se toca; la URL pública se gestiona en
postmeta
/contenido.
Seguridad
-
HMAC con token compartido en cada petición.
-
Validación de capabilities y nonce en acciones de UI.
-
Whitelist IP opcional en Receptor.
-
Rate-limit y bloqueo temporal tras intentos fallidos.
-
Logs con redacción parcial (no guarda tokens en claro).
Logs, reintentos y progreso
-
UI de progreso: porcentaje por lote y por post (medios incluidos).
-
Registro: fecha, post ID origen/destino, duración, dif de campos críticos.
-
Reintentos: cola para fallos (HTTP 429/5xx o validaciones temporales).
-
Exportar log: CSV desde la pantalla del plugin.
Buenas prácticas
-
Haz un primer sync en staging.
-
Define lista de metadatos excluidos (por ej., cachés o flags locales).
-
Si usas cachés/persistentes, purga tras sincronizar bloques pesados.
-
Si mueves Elementor, regenera CSS en destino si ves desajustes (
Elementor → Herramientas → Regenerar CSS
).
Solución de problemas (rápidas)
-
401/403: token incorrecto, role/capability insuficiente o WAF bloqueando REST.
-
Medios no aparecen: permisos de subida en destino o URLs sin reemplazar; revisa el log de adjuntos.
-
JSON/Elementor roto: activa el reemplazo profundo en
_elementor_data
; purga caché y regenera CSS. -
Diferencias de autor: activa mapeo por email y define autor por defecto.