{"id":136,"date":"2025-10-02T00:00:00","date_gmt":"2025-10-01T22:00:00","guid":{"rendered":"https:\/\/helloblog.io\/es\/despliegues-wordpress-sin-downtime-con-trellis\/"},"modified":"2026-01-20T06:32:43","modified_gmt":"2026-01-20T05:32:43","slug":"despliegues-wordpress-sin-downtime-con-trellis","status":"publish","type":"post","link":"https:\/\/helloblog.io\/es\/despliegues-wordpress-sin-downtime-con-trellis\/","title":{"rendered":"Despliegues WordPress sin downtime con Trellis: atom\u00eda, rollback y hooks"},"content":{"rendered":"\n<p>En el ecosistema WordPress sigue siendo sorprendentemente com\u00fan que un despliegue implique \u201cpisar\u201d archivos en producci\u00f3n: FTP, un <code>rsync<\/code> r\u00e1pido o alg\u00fan sistema del hosting que actualiza el c\u00f3digo in-place. Funciona\u2026 hasta que no funciona. El patr\u00f3n cl\u00e1sico: el sitio sirve durante unos segundos (o minutos) una mezcla de archivos antiguos y nuevos y, con mala suerte, rompes el front, el admin o una integraci\u00f3n cr\u00edtica.<\/p>\n\n\n\n<p>Trellis (del stack de Roots) trae una idea muy est\u00e1ndar en desarrollo moderno: <strong>despliegues sin downtime<\/strong> mediante una estrategia <em>atomic deployment<\/em> (despliegue at\u00f3mico). Lo interesante es que no necesitas \u201ccasarte\u201d con Trellis para todo tu flujo: hay equipos que lo usan \u00fanicamente como herramienta de despliegue de sitios WordPress basados en Bedrock, manteniendo su entorno local favorito (Valet, Lando, DDEV, etc.) y desplegando incluso en proveedores gestionados.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Qu\u00e9 significa realmente \u201czero downtime\u201d en un WordPress<\/h2>\n\n\n\n<p>Un despliegue sin downtime busca que el sitio se mantenga <strong>totalmente accesible y funcional durante todo el proceso<\/strong>. La diferencia no est\u00e1 en \u201csubir m\u00e1s r\u00e1pido\u201d, sino en evitar el estado intermedio peligroso: ese momento en el que el servidor web puede encontrar una plantilla nueva que llama a una funci\u00f3n que a\u00fan no existe, o un archivo borrado que todav\u00eda se referencia.<\/p>\n\n\n\n<p>La clave es preparar una release completa <strong>en aislamiento<\/strong> y, cuando est\u00e1 lista, hacer un cambio instant\u00e1neo para que el servidor empiece a servir esa release. Sin mezclas. Sin ventanas de inconsistencia.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">El problema t\u00edpico de despliegue en WordPress (y por qu\u00e9 se rompe)<\/h2>\n\n\n\n<p>Los enfoques m\u00e1s habituales suelen caer en alguna de estas categor\u00edas:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n\n<li><strong>Subidas por FTP\/SFTP:<\/strong> vas copiando cambios y sobrescribiendo archivos. El tiempo de subida (y la latencia) hace que el sitio quede expuesto a combinaciones incoherentes de versiones.<\/li>\n\n\n<li><strong>Sincronizaci\u00f3n tipo <code>rsync<\/code>:<\/strong> m\u00e1s r\u00e1pido que FTP, pero conceptualmente igual: actualizas archivos sobre el \u00e1rbol activo mientras el tr\u00e1fico sigue entrando.<\/li>\n\n\n<li><strong>Sistemas basados en plugins del hosting:<\/strong> c\u00f3modos, pero a menudo siguen actualizando el c\u00f3digo in-place y, si algo falla, el rollback no es inmediato (o ni siquiera existe como operaci\u00f3n simple).<\/li>\n\n<\/ul>\n\n\n\n<p>El denominador com\u00fan: <strong>durante el despliegue tu sitio puede servir una mezcla de viejo y nuevo<\/strong>, no tienes un rollback de un solo comando y tus usuarios pueden ver errores justo en la ventana del despliegue.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">C\u00f3mo lo resuelve Trellis: despliegues at\u00f3micos e inmutables<\/h2>\n\n\n\n<p>Trellis aplica una estrategia de despliegue at\u00f3mico: cada publicaci\u00f3n crea una <strong>release completa en un directorio nuevo<\/strong>. Esa release es <strong>inmutable<\/strong>: una vez desplegada, sus archivos no se modifican in-place. Cuando todo est\u00e1 preparado, Trellis cambia un symlink y el servidor pasa a servir la nueva release de forma instant\u00e1nea.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Estructura de directorios: el symlink <code>current<\/code> como pieza central<\/h3>\n\n\n\n<p>En un servidor desplegado con Trellis, la estructura t\u00edpica se parece a esto:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#24292e\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#e1e4e8;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>\/srv\/www\/example.com\/\n\u251c\u2500\u2500 current\/             # Symlink a la release activa\n\u251c\u2500\u2500 releases\/            # Historial de releases desplegadas\n\u2502   \u251c\u2500\u2500 20250930124530\/\n\u2502   \u251c\u2500\u2500 20250930083045\/\n\u2502   \u2514\u2500\u2500 20250930141622\/  # La m\u00e1s reciente\n\u251c\u2500\u2500 shared\/              # Archivos compartidos entre releases\n\u2502   \u2514\u2500\u2500 uploads\/\n\u2514\u2500\u2500 logs\/\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color:#B392F0\">\/srv\/www\/example.com\/<\/span><\/span>\n<span class=\"line\"><span style=\"color:#B392F0\">\u251c\u2500\u2500<\/span><span style=\"color:#9ECBFF\"> current\/<\/span><span style=\"color:#6A737D\">             # Symlink a la release activa<\/span><\/span>\n<span class=\"line\"><span style=\"color:#B392F0\">\u251c\u2500\u2500<\/span><span style=\"color:#9ECBFF\"> releases\/<\/span><span style=\"color:#6A737D\">            # Historial de releases desplegadas<\/span><\/span>\n<span class=\"line\"><span style=\"color:#B392F0\">\u2502<\/span><span style=\"color:#9ECBFF\">   \u251c\u2500\u2500<\/span><span style=\"color:#9ECBFF\"> 20250930124530\/<\/span><\/span>\n<span class=\"line\"><span style=\"color:#B392F0\">\u2502<\/span><span style=\"color:#9ECBFF\">   \u251c\u2500\u2500<\/span><span style=\"color:#9ECBFF\"> 20250930083045\/<\/span><\/span>\n<span class=\"line\"><span style=\"color:#B392F0\">\u2502<\/span><span style=\"color:#9ECBFF\">   \u2514\u2500\u2500<\/span><span style=\"color:#9ECBFF\"> 20250930141622\/<\/span><span style=\"color:#6A737D\">  # La m\u00e1s reciente<\/span><\/span>\n<span class=\"line\"><span style=\"color:#B392F0\">\u251c\u2500\u2500<\/span><span style=\"color:#9ECBFF\"> shared\/<\/span><span style=\"color:#6A737D\">              # Archivos compartidos entre releases<\/span><\/span>\n<span class=\"line\"><span style=\"color:#B392F0\">\u2502<\/span><span style=\"color:#9ECBFF\">   \u2514\u2500\u2500<\/span><span style=\"color:#9ECBFF\"> uploads\/<\/span><\/span>\n<span class=\"line\"><span style=\"color:#B392F0\">\u2514\u2500\u2500<\/span><span style=\"color:#9ECBFF\"> logs\/<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>Tu servidor web (Nginx, por ejemplo) apunta siempre a <code>current\/<\/code>. Pero <code>current\/<\/code> no es un directorio \u201creal\u201d: es un enlace simb\u00f3lico al directorio de una release concreta dentro de <code>releases\/<\/code>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Qu\u00e9 pasa cuando ejecutas <code>trellis deploy production<\/code><\/h3>\n\n\n\n<p>A alto nivel, el despliegue sigue un pipeline claro (y separado del \u00e1rbol activo):<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n\n<li><strong>Initialize:<\/strong> verifica\/crea la estructura base y genera un nuevo directorio de release con timestamp.<\/li>\n\n\n<li><strong>Update:<\/strong> clona el c\u00f3digo m\u00e1s reciente desde tu repositorio Git a un directorio fuente temporal, fuera del sitio en vivo.<\/li>\n\n\n<li><strong>Prepare:<\/strong> copia el contenido necesario a la nueva release.<\/li>\n\n\n<li><strong>Build:<\/strong> ejecuta <code>composer install<\/code> para descargar dependencias PHP.<\/li>\n\n\n<li><strong>Share:<\/strong> enlaza recursos persistentes (por ejemplo, <code>uploads<\/code>) desde <code>shared\/<\/code> hacia la release nueva.<\/li>\n\n\n<li><strong>Finalize:<\/strong> actualiza el symlink <code>current<\/code> para apuntar a la release reci\u00e9n preparada.<\/li>\n\n<\/ol>\n\n\n\n<p>El cambio visible para el usuario ocurre en el \u00faltimo paso: un instante est\u00e1s sirviendo <code>releases\/20250930124530<\/code> y al siguiente <code>releases\/20250930141622<\/code>. No hay un periodo \u201ca medias\u201d.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">La base de datos: el punto que no puedes ignorar<\/h2>\n\n\n\n<p>Importante: que el c\u00f3digo se despliegue sin downtime no implica autom\u00e1ticamente que tus cambios de <strong>base de datos<\/strong> est\u00e9n cubiertos. Seg\u00fan la documentaci\u00f3n de despliegues de Trellis, las migraciones a un nuevo esquema <strong>no vienen incluidas<\/strong> como parte del deploy.<\/p>\n\n\n\n<p>Si trabajas con Acorn (el runtime de Roots con enfoque Laravel), puedes crear y ejecutar <strong>migrations de Laravel<\/strong> para tus sitios WordPress y encajarlas dentro del proceso de despliegue para tener un flujo m\u00e1s controlado. Aun as\u00ed, conviene dise\u00f1ar migraciones compatibles hacia delante\/atr\u00e1s si quieres mantener la opci\u00f3n de rollback con seguridad.<\/p>\n\n\n\n<div class=\"wp-block-group callout callout-warning is-style-warning is-layout-flow wp-block-group-is-layout-flow\" style=\"border-width:1px;border-radius:8px;padding-top:1rem;padding-right:1.5rem;padding-bottom:1rem;padding-left:1.5rem\">\n\n<h4 class=\"wp-block-heading callout-title\">Ojo con el \u201cdowntime l\u00f3gico\u201d<\/h4>\n\n\n<p>Aunque el cambio de symlink sea instant\u00e1neo, una migraci\u00f3n destructiva (cambios de columnas, drops, renombres sin compatibilidad) puede romper la release anterior e impedir un rollback limpio. La estrategia de despliegue y la estrategia de migraci\u00f3n tienen que ir alineadas.<\/p>\n\n<\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Rollback integrado: volver atr\u00e1s en segundos<\/h2>\n\n\n\n<p>Una consecuencia directa de tener releases completas e inmutables es que el rollback se vuelve trivial: si el problema est\u00e1 en el nuevo c\u00f3digo, basta con repuntar <code>current<\/code> a la release anterior.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#24292e\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#e1e4e8;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>trellis rollback production\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color:#B392F0\">trellis<\/span><span style=\"color:#9ECBFF\"> rollback<\/span><span style=\"color:#9ECBFF\"> production<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>Por defecto, Trellis mantiene un n\u00famero limitado de releases recientes en el servidor (habitualmente cinco). Eso te da una red de seguridad muy pr\u00e1ctica: fall\u00f3 algo en producci\u00f3n, vuelves a la release previa sin \u201cdeshacer\u201d archivos manualmente.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Hooks de despliegue: personaliza el pipeline sin hacks<\/h2>\n\n\n\n<p>En entornos reales, el despliegue casi nunca es solo \u201csubir c\u00f3digo\u201d. Trellis expone <strong>hooks<\/strong> (puntos de extensi\u00f3n) para ejecutar tareas antes o despu\u00e9s de pasos concretos del deploy. Por ejemplo:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n\n<li><code>deploy_build_before<\/code> y <code>deploy_build_after<\/code> para pasos de build personalizados.<\/li>\n\n\n<li><code>deploy_finalize_before<\/code> y <code>deploy_finalize_after<\/code> para tareas justo antes\/despu\u00e9s de activar la release.<\/li>\n\n\n<li>Hooks para cada fase relevante: initialize, update, prepare, build, share y finalize.<\/li>\n\n<\/ul>\n\n\n\n<p>Esto habilita patrones muy \u00fatiles en WordPress moderno: backups de BD antes de publicar, purgas de cach\u00e9 despu\u00e9s del cambio, notificaciones internas, o smoke tests contra la release reci\u00e9n desplegada.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">C\u00f3mo empezar (sin cambiar tu entorno local)<\/h2>\n\n\n\n<p>El camino m\u00e1s directo para aprovechar despliegues at\u00f3micos con Trellis suele ser:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n\n<li>Estructurar el proyecto con <a href=\"https:\/\/roots.io\/bedrock\/\">Bedrock<\/a> para ordenar WordPress como aplicaci\u00f3n (dependencias con Composer, configuraci\u00f3n por entornos, etc.).<\/li>\n\n\n<li>Instalar y configurar <a href=\"https:\/\/roots.io\/trellis\/\">Trellis<\/a> con tus entornos y par\u00e1metros de despliegue.<\/li>\n\n\n<li>A\u00f1adir la info de tu repositorio Git en <code>wordpress_sites.yml<\/code>.<\/li>\n\n\n<li>Ejecutar el despliegue: <code>trellis deploy production<\/code>.<\/li>\n\n<\/ol>\n\n\n\n<p>El primer despliegue suele ser el m\u00e1s lento porque prepara estructura, instala dependencias y deja todo listo. A partir de ah\u00ed, lo importante no es solo la velocidad: es la tranquilidad de publicar sin exponer a tus usuarios a un sitio inconsistente.<\/p>\n\n\n\n<div class=\"wp-block-group callout callout-info is-style-info is-layout-flow wp-block-group-is-layout-flow\" style=\"border-width:1px;border-radius:8px;padding-top:1rem;padding-right:1.5rem;padding-bottom:1rem;padding-left:1.5rem\">\n\n<h4 class=\"wp-block-heading callout-title\">Detalle pr\u00e1ctico<\/h4>\n\n\n<p>Seg\u00fan el enfoque descrito por Roots, puedes usar Trellis \u00fanicamente para despliegue incluso en servidores que no hayas provisionado con Trellis, y mantener tu stack local preferido. La ganancia est\u00e1 en el m\u00e9todo de releases + symlink, no en imponer un \u00fanico entorno de desarrollo.<\/p>\n\n<\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Resumen: qu\u00e9 te llevas si vienes del \u201cFTP a producci\u00f3n\u201d<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n\n<li>Un despliegue que no sirve mezclas de versiones: la activaci\u00f3n es un cambio at\u00f3mico de symlink.<\/li>\n\n\n<li>Releases inmutables: lo desplegado no se \u201cparchea\u201d en caliente.<\/li>\n\n\n<li>Rollback inmediato con un comando, apoyado en el historial de releases.<\/li>\n\n\n<li>Hooks para meter tareas reales de operaci\u00f3n (cach\u00e9s, backups, checks) en el pipeline.<\/li>\n\n\n<li>La BD sigue siendo tu responsabilidad: planifica migraciones pensando en compatibilidad y reversi\u00f3n.<\/li>\n\n<\/ul>\n\n\n<div class=\"references-section\">\n                <h2>Referencias \/ Fuentes<\/h2>\n                <ul class=\"references-list\"><li><a href=\"https:\/\/roots.io\/zero-downtime-wordpress-deployments-with-trellis\/\" target=\"_blank\" rel=\"noopener noreferrer\">Zero Downtime WordPress Deployments with Trellis<\/a><\/li><li><a href=\"https:\/\/roots.io\/trellis\/docs\/deployments\/\" target=\"_blank\" rel=\"noopener noreferrer\">Deployments | Trellis Documentation<\/a><\/li><li><a href=\"https:\/\/roots.io\/bedrock\/\" target=\"_blank\" rel=\"noopener noreferrer\">Bedrock<\/a><\/li><li><a href=\"https:\/\/roots.io\/trellis\/\" target=\"_blank\" rel=\"noopener noreferrer\">Trellis<\/a><\/li><li><a href=\"https:\/\/roots.io\/acorn\/docs\/creating-and-running-laravel-migrations\/\" target=\"_blank\" rel=\"noopener noreferrer\">Creating and running Laravel migrations | Acorn Documentation<\/a><\/li><\/ul>\n            <\/div>","protected":false},"excerpt":{"rendered":"<p>Si alguna vez has subido cambios a producci\u00f3n y has rezado para que nadie entre justo en ese minuto, esto es para ti. Trellis aplica despliegues at\u00f3micos a WordPress para publicar releases sin cortes y con rollback inmediato.<\/p>\n","protected":false},"author":16,"featured_media":135,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[36],"tags":[66,70,3,69,10],"class_list":["post-136","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-ecosistema-wordpress","tag-bedrock","tag-deploy","tag-roots","tag-trellis","tag-wordpress"],"_links":{"self":[{"href":"https:\/\/helloblog.io\/es\/wp-json\/wp\/v2\/posts\/136","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/helloblog.io\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/helloblog.io\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/helloblog.io\/es\/wp-json\/wp\/v2\/users\/16"}],"replies":[{"embeddable":true,"href":"https:\/\/helloblog.io\/es\/wp-json\/wp\/v2\/comments?post=136"}],"version-history":[{"count":1,"href":"https:\/\/helloblog.io\/es\/wp-json\/wp\/v2\/posts\/136\/revisions"}],"predecessor-version":[{"id":152,"href":"https:\/\/helloblog.io\/es\/wp-json\/wp\/v2\/posts\/136\/revisions\/152"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/helloblog.io\/es\/wp-json\/wp\/v2\/media\/135"}],"wp:attachment":[{"href":"https:\/\/helloblog.io\/es\/wp-json\/wp\/v2\/media?parent=136"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/helloblog.io\/es\/wp-json\/wp\/v2\/categories?post=136"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/helloblog.io\/es\/wp-json\/wp\/v2\/tags?post=136"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}