{"id":82250,"date":"2026-03-02T07:24:32","date_gmt":"2026-03-02T06:24:32","guid":{"rendered":"https:\/\/kinsta.com\/es\/?p=82250&#038;preview=true&#038;preview_id=82250"},"modified":"2026-03-02T08:24:41","modified_gmt":"2026-03-02T07:24:41","slug":"comandos-wp-cli-personalizados-acorn","status":"publish","type":"post","link":"https:\/\/kinsta.com\/es\/blog\/comandos-wp-cli-personalizados-acorn\/","title":{"rendered":"C\u00f3mo crear comandos WP-CLI personalizados y automatizar el mantenimiento de WordPress con Acorn"},"content":{"rendered":"<p>Probablemente tengas scripts PHP que realizan diversas tareas, como limpiar metadatos de entradas hu\u00e9rfanas o eliminar transitorios caducados. Con el tiempo, esa colecci\u00f3n crece y se almacena en un archivo de tema, una carpeta de plugins o un directorio oculto. Acorn ayuda a controlar esta desorganizaci\u00f3n al incorporar la consola Artisan de Laravel a WordPress.<\/p>\n<p>Esto significa que puedes crear comandos WP-CLI personalizados con archivos de clase estructurados que centralizan tu l\u00f3gica de mantenimiento. Estos comandos se ejecutan de forma coherente en las fases de desarrollo, staging y producci\u00f3n utilizando indicadores de progreso, salida de tablas formateadas, gesti\u00f3n adecuada de errores y mucho m\u00e1s. A continuaci\u00f3n, puedes activarlos a trav\u00e9s de SSH, programarlos con cron jobs o ejecutarlos durante los despliegues.<\/p>\n<div><\/div><kinsta-auto-toc heading=\"Table of Contents\" list-style=\"arrow\" selector=\"h2\" count-number=\"-1\"><\/kinsta-auto-toc>\n<h2>C\u00f3mo instalar Acorn y ejecutar comandos<\/h2>\n<p>El primer paso es instalar las dependencias que necesitas. Acorn necesita <a href=\"https:\/\/kinsta.com\/es\/blog\/php-8-2\/\">PHP 8.2<\/a> o superior, <a href=\"https:\/\/kinsta.com\/es\/blog\/instalar-composer\/\">Composer<\/a> para gestionar las dependencias y <a href=\"https:\/\/kinsta.com\/es\/blog\/wp-cli\/\">WP-CLI<\/a> ejecut\u00e1ndose en tu servidor. Kinsta incluye WP-CLI en todos los planes de alojamiento, as\u00ed que puedes empezar a crear comandos directamente.<\/p>\n<p>Instala Acorn a trav\u00e9s de Composer utilizando <code>composer require roots\/acorn<\/code> dentro de la ra\u00edz del proyecto. A continuaci\u00f3n, a\u00f1ade el c\u00f3digo de arranque al archivo <code>functions.php<\/code> de tu tema o al archivo principal de tu plugin:<\/p>\n<pre><code class=\"language-php\">&lt;?php\nuse RootsAcornApplication;\nif (! class_exists(RootsAcornApplication::class)) {\n    wp_die(\n        __('You need to install Acorn to use this site.', 'domain'),\n        '',\n        [\n            'link_url' =&gt; 'https:\/\/roots.io\/acorn\/docs\/installation\/',\n            'link_text' =&gt; __('Acorn Docs: Installation', 'domain'),\n        ]\n    );\n}\n\nadd_action('after_setup_theme', function () {\n    Application::configure()\n        -&gt;withProviders([\n            AppProvidersThemeServiceProvider::class,\n        ])\n        -&gt;boot();\n}, 0);\n<\/code><\/pre>\n<p>La configuraci\u00f3n lista para usar (zero-config) almacena la cach\u00e9 de la aplicaci\u00f3n y los registros en el <a href=\"https:\/\/kinsta.com\/es\/blog\/wordpress-cache\/\">directorio de cach\u00e9 de WordPress<\/a> en <code>[wp-content]\/cache\/acorn\/<\/code>, mientras que tus comandos residen en el directorio <code>app\/<\/code> del tema.<\/p>\n<p>La estructura tradicional sigue las convenciones de Laravel, como directorios dedicados para <code>app\/<\/code>, <code>config\/<\/code>, <code>storage\/<\/code>, y <code>resources\/<\/code> en la ra\u00edz de tu proyecto. Esto se configura con una sola l\u00ednea:<\/p>\n<pre><code class=\"language-bash\">wp acorn acorn:init storage && wp acorn vendor:publish --tag=acorn\n<\/code><\/pre>\n<p>Si ejecutas <code>wp acorn list<\/code>, esto verificar\u00e1 tu instalaci\u00f3n mostrando todos los comandos Acorn disponibles. A partir de este momento, todos los comandos personalizados que crees se almacenar\u00e1n en el directorio <code>app\/Console\/Commands\/<\/code>. Acorn descubre autom\u00e1ticamente cualquier clase de comando en esta ubicaci\u00f3n y la registra en WP-CLI.<\/p>\n<aside role=\"note\" class=\"wp-block-kinsta-notice is-style-info\">\n            <h3>Info<\/h3>\n        <p>Te conectas a tu servidor a trav\u00e9s de SSH, y luego ejecutas <code>wp acorn<\/code> seguido del nombre de tu comando. Para los clientes de Kinsta, esos <a href=\"https:\/\/kinsta.com\/help\/connect-to-ssh\/\">detalles de conexi\u00f3n SSH<\/a> est\u00e1n en tu panel MyKinsta.<\/p>\n<\/aside>\n\n<h2>Creando tu primer comando Artisan<\/h2>\n<p>El comando Artisan <code>wp acorn make:command CleanupCommand<\/code> genera tu archivo con la estructura que necesitas. Contiene tres elementos clave que todo comando Artisan necesita:<\/p>\n<ul>\n<li>Una propiedad <code>$signature<\/code> que define el nombre y las opciones de tu comando.<\/li>\n<li>La propiedad <code>$description<\/code> para el texto de ayuda.<\/li>\n<li>Un m\u00e9todo <code>handle()<\/code> donde vive la l\u00f3gica de tu comando.<\/li>\n<\/ul>\n<p>En este caso, construye <code>app\/Console\/Commands\/CleanupCommand.php<\/code> con una estructura b\u00e1sica de comandos:<\/p>\n<pre><code class=\"language-php\">&lt;?php\nnamespace AppConsoleCommands;\nuse IlluminateConsoleCommand;\nclass CleanupCommand extends Command\n{\n    protected $signature = 'app:cleanup';\n    protected $description = 'Command description';\n    public function handle()\n    {\n        \/\/\n    }\n}\n<\/code><\/pre>\n<p>La propiedad <code>$signature<\/code> utiliza una sintaxis espec\u00edfica:<\/p>\n<ul>\n<li>Un comando b\u00e1sico s\u00f3lo necesita un nombre, como <code>cleanup:run<\/code>.<\/li>\n<li>Los argumentos obligatorios se a\u00f1aden entre llaves (<code>cleanup:run {days}<\/code>, por ejemplo).<\/li>\n<li>Los argumentos opcionales llevan un signo de interrogaci\u00f3n: <code>cleanup:run {days?}<\/code>.<\/li>\n<li>Las opciones utilizan guiones dobles: <code>cleanup:run {--force} {--limit=100}<\/code>.<\/li>\n<\/ul>\n<p>A continuaci\u00f3n, incluye una descripci\u00f3n del comando y su l\u00f3gica b\u00e1sica:<\/p>\n<pre><code class=\"language-php\">protected $signature = 'cleanup:test {--dry-run : Preview changes without executing}';\nprotected $description = 'Test cleanup command';\npublic function handle()\n{\n    $dryRun = $this-&gt;option('dry-run');\n\n    if ($dryRun) {\n        $this-&gt;components-&gt;info('Running in dry-run mode');\n    }\n\n    $this-&gt;components-&gt;info('Cleanup command executed');\n\n    return 0;\n}\n<\/code><\/pre>\n<p>Puedes probarlo utilizando <code>wp acorn cleanup:test --dry-run<\/code>. El comando emite mensajes formateados utilizando el sistema de componentes de Artisan. El m\u00e9todo <code>$this-&gt;components-&gt;info()<\/code> muestra los mensajes de \u00e9xito en verde. Tambi\u00e9n puedes utilizar <code>$this-&gt;components-&gt;error()<\/code> para los errores, <code>$this-&gt;components-&gt;warn()<\/code> para las advertencias y <code>$this-&gt;line()<\/code> para la salida de texto plano.<\/p>\n<h2>C\u00f3mo construir 3 comandos de mantenimiento pr\u00e1cticos<\/h2>\n<p>Aqu\u00ed tienes algunos ejemplos que te ayudar\u00e1n a abordar las tareas de mantenimiento de la base de datos que surgen en muchos sitios de WordPress.<\/p>\n<p>Aunque cada comando incluye gesti\u00f3n de errores y sigue en gran medida los est\u00e1ndares de codificaci\u00f3n de WordPress para mantener tus datos seguros, debes utilizarlos como base para tus propios proyectos en lugar de limitarte a copiarlos y pegarlos.<\/p>\n<h3>1. Limpieza de metadatos de publicaciones hu\u00e9rfanas<\/h3>\n<p>Los <a href=\"https:\/\/kinsta.com\/es\/blog\/ultima-actualizacion\/\">metadatos de las entradas<\/a> permanecen despu\u00e9s de eliminar las entradas. Esto ocurre cuando los plugins omiten los hooks de eliminaci\u00f3n de WordPress y dejan entradas de metadatos que apuntan a entradas que ya no existen. Con el tiempo, esta sobrecarga ralentiza las consultas a la base de datos.<\/p>\n<p>Una vez creado el comando con <code>wp acorn make:command CleanupOrphanedMeta<\/code>, puedes empezar con la estructura y la firma de la clase del comando:<\/p>\n<pre><code class=\"language-php\">&lt;?php\nnamespace AppConsoleCommands;\nuse IlluminateConsoleCommand;\nclass CleanupOrphanedMeta extends Command\n{\n    protected $signature = 'maintenance:cleanup-orphaned-meta \n                            {--dry-run : Preview orphans without deleting}';\n    \n    protected $description = 'Remove orphaned post metadata from wp_postmeta';\n    public function handle()\n    {\n        global $wpdb;\n\n        $dryRun = $this-&gt;option('dry-run');\n\n        $this-&gt;components-&gt;info('Scanning for orphaned post metadata...');\n<\/code><\/pre>\n<p>El comando utiliza una consulta <code>LEFT JOIN<\/code> para encontrar estos registros hu\u00e9rfanos. El patr\u00f3n comprueba si hay valores <code>NULL<\/code> en la tabla posts. Si la uni\u00f3n devuelve <code>NULL<\/code> los metadatos pertenecen a un post eliminado:<\/p>\n<pre><code class=\"language-php\">        \/\/ Find orphaned metadata\n        $orphans = $wpdb-&gt;get_results(\"\n            SELECT pm.meta_id, pm.post_id, pm.meta_key \n            FROM {$wpdb-&gt;postmeta} pm\n            LEFT JOIN {$wpdb-&gt;posts} p ON pm.post_id = p.ID\n            WHERE p.ID IS NULL\n            LIMIT 1000\n        \");\n\n        if (empty($orphans)) {\n            $this-&gt;components-&gt;info('No orphaned metadata found');\n            return 0;\n        }\n<\/code><\/pre>\n<p>Cuando el comando encuentra registros hu\u00e9rfanos, muestra un recuento y una muestra de algunos registros si est\u00e1s en modo de prueba (dry-run). Debes verificar qu\u00e9 se va a eliminar antes de confirmar los cambios:<\/p>\n<pre><code class=\"language-php\">        $count = count($orphans);\n        $this-&gt;components-&gt;warn(\"Found {$count} orphaned metadata records\");\n        if ($dryRun) {\n            $this-&gt;newLine();\n            $this-&gt;line('Sample orphaned records:');\n\n            foreach (array_slice($orphans, 0, 5) as $orphan) {\n                $this-&gt;line(\"  \u2192 Post ID {$orphan-&gt;post_id}: {$orphan-&gt;meta_key}\");\n            }\n\n            return 0;\n        }\n<\/code><\/pre>\n<p>El borrado real utiliza <code>$wpdb-&gt;prepare()<\/code> para evitar ataques de <a href=\"https:\/\/kinsta.com\/es\/blog\/inyeccion-sql\/\">inyecci\u00f3n SQL<\/a>. El comando procesa 1.000 registros a la vez, lo que evita problemas de memoria en sitios con millones de entradas de metadatos:<\/p>\n<pre><code class=\"language-php\">        \/\/ Delete orphaned records\n        $metaIds = array_map(function($orphan) {\n            return $orphan-&gt;meta_id;\n        }, $orphans);\n\n        $placeholders = implode(',', array_fill(0, count($metaIds), '%d'));\n\n        $deleted = $wpdb-&gt;query(\n            $wpdb-&gt;prepare(\n                \"DELETE FROM {$wpdb-&gt;postmeta} WHERE meta_id IN ({$placeholders})\",\n                ...$metaIds\n            )\n        );\n\n        if ($deleted === false) {\n            $this-&gt;components-&gt;error('Failed to delete orphaned metadata');\n            return 1;\n        }\n\n        $this-&gt;components-&gt;info(\"Deleted {$deleted} orphaned metadata records\");\n        return 0;\n    }\n}\n<\/code><\/pre>\n<p>Para ejecutar el comando, utiliza <code>wp acorn maintenance:cleanup-orphaned-meta --dry-run<\/code>.<\/p>\n<h3>2. Eliminar transitorios caducados<\/h3>\n<p>WordPress almacena <a href=\"https:\/\/developer.wordpress.org\/apis\/transients\/\">datos transitorios<\/a> en <code>wp_options<\/code> con fechas de caducidad. Aunque un <a href=\"https:\/\/kinsta.com\/es\/blog\/wordpress-cron-jobs\/\">cron job<\/a> diario se encarga de limpiarlos, a veces es necesario realizar una limpieza manual durante las ventanas de mantenimiento o cuando la acumulaci\u00f3n de datos transitorios se convierte en un problema.<\/p>\n<p>Despu\u00e9s de generar el comando con <code>wp acorn make:command CleanupTransients<\/code>, puedes configurar la estructura del comando:<\/p>\n<pre><code class=\"language-php\">&lt;?php\nnamespace AppConsoleCommands;\nuse IlluminateConsoleCommand;\nclass CleanupTransients extends Command\n{\n    protected $signature = 'maintenance:cleanup-transients';\n    protected $description = 'Delete expired transients from wp_options';\n    public function handle()\n    {\n        global $wpdb;\n\n        $this-&gt;components-&gt;info('Deleting expired transients...');\n<\/code><\/pre>\n<p>Esta consulta de eliminaci\u00f3n utiliza la sintaxis multi-tabla <code>DELETE<\/code> para eliminar tanto el transitorio como su opci\u00f3n de tiempo de espera a la vez. La consulta encuentra los registros de tiempo de espera en los que ha pasado la fecha de caducidad:<\/p>\n<pre><code class=\"language-php\">        \/\/ Delete expired regular transients\n        $deleted = $wpdb-&gt;query(\n            $wpdb-&gt;prepare(\n                \"DELETE a, b FROM {$wpdb-&gt;options} a, {$wpdb-&gt;options} b\n                WHERE a.option_name LIKE %s\n                AND a.option_name NOT LIKE %s\n                AND b.option_name = CONCAT('_transient_timeout_', SUBSTRING(a.option_name, 12))\n                AND b.option_value &lt; %d\",\n                $wpdb-&gt;esc_like('_transient_') . '%',\n                $wpdb-&gt;esc_like('_transient_timeout_') . '%',\n                time()\n            )\n        );\n<\/code><\/pre>\n<p>Tambi\u00e9n comprueba si hay errores y realiza un seguimiento del recuento de eliminaciones:<\/p>\n<pre><code class=\"language-php\">        if ($deleted === false) {\n            $this-&gt;components-&gt;error('Failed to delete transients');\n            return 1;\n        }\n\n        $transientCount = $deleted;\n<\/code><\/pre>\n<p>En las <a href=\"https:\/\/kinsta.com\/es\/blog\/multisitio-wordpress\/\">instalaciones Multisitio<\/a>, el comando ejecuta una segunda consulta para los sitios transitorios. \u00c9stas utilizan prefijos de tabla diferentes, pero siguen el mismo patr\u00f3n de borrado:<\/p>\n<pre><code class=\"language-php\">        \/\/ Delete expired site transients (multisite)\n        if (is_multisite()) {\n            $siteDeleted = $wpdb-&gt;query(\n                $wpdb-&gt;prepare(\n                    \"DELETE a, b FROM {$wpdb-&gt;options} a, {$wpdb-&gt;options} b\n                    WHERE a.option_name LIKE %s\n                    AND a.option_name NOT LIKE %s\n                    AND b.option_name = CONCAT('_site_transient_timeout_', SUBSTRING(a.option_name, 17))\n                    AND b.option_value &lt; %d\",\n                    $wpdb-&gt;esc_like('_site_transient_') . '%',\n                    $wpdb-&gt;esc_like('_site_transient_timeout_') . '%',\n                    time()\n                )\n            );\n\n            if ($siteDeleted !== false) {\n                $transientCount += $siteDeleted;\n            }\n        }\n\n        $this-&gt;components-&gt;info(\"Deleted {$transientCount} expired transients\");\n\n        return 0;\n    }\n}\n<\/code><\/pre>\n<p>Para ejecutar el comando, ejecuta <code>wp acorn maintenance:cleanup-transients<\/code>.<\/p>\n<h3>3. Auditor\u00eda de opciones cargadas autom\u00e1ticamente<\/h3>\n<p>Las <a href=\"https:\/\/kinsta.com\/es\/blog\/wp_options-datos-de-autocarga\/\">opciones con carga autom\u00e1tica<\/a> (autoloaded options) se cargan en cada solicitud que procesa tu sitio WordPress. Puedes empezar a notar ralentizaciones y picos de consumo de memoria cuando estos datos superan 1 MB. Este comando encuentra las opciones con carga autom\u00e1tica m\u00e1s pesadas para que puedas localizar qu\u00e9 plugins est\u00e1n causando el exceso de carga.<\/p>\n<p>Primero, crea el comando de auditor\u00eda con <code>wp acorn make:command AuditAutoload<\/code>. A continuaci\u00f3n, define la firma del comando con un umbral configurable:<\/p>\n<pre><code class=\"language-php\">&lt;?php\nnamespace AppConsoleCommands;\nuse IlluminateConsoleCommand;\nclass AuditAutoload extends Command\n{\n    protected $signature = 'maintenance:audit-autoload \n                            {--threshold=1000000 : Size threshold in bytes}';\n\n    protected $description = 'Audit autoloaded options size';\n    public function handle()\n    {\n        global $wpdb;\n\n        $threshold = (int) $this-&gt;option('threshold');\n\n        $this-&gt;components-&gt;info('Calculating autoloaded options size...');\n<\/code><\/pre>\n<p>A partir de aqu\u00ed, calcula el tama\u00f1o total de todas las opciones autocargadas:<\/p>\n<pre><code class=\"language-php\">        \/\/ Get total autoload size\n        $result = $wpdb-&gt;get_row(\n            \"SELECT \n                SUM(LENGTH(option_value)) as total_bytes,\n                COUNT(*) as total_count\n            FROM {$wpdb-&gt;options}\n            WHERE autoload = 'yes'\"\n        );\n\n        $totalBytes = (int) $result-&gt;total_bytes;\n        $totalCount = (int) $result-&gt;total_count;\n        $totalMb = round($totalBytes \/ 1024 \/ 1024, 2);\n\n        $this-&gt;newLine();\n        $this-&gt;line(\"Total autoloaded: {$totalMb} MB ({$totalCount} options)\");\n<\/code><\/pre>\n<p>El comando ejecuta una consulta para las opciones que superan tu umbral, las ordena por tama\u00f1o y limita los resultados a las 20 m\u00e1s grandes:<\/p>\n<pre><code class=\"language-php\">        \/\/ Get largest autoloaded options\n        $largeOptions = $wpdb-&gt;get_results(\n            $wpdb-&gt;prepare(\n                \"SELECT option_name, LENGTH(option_value) as size_bytes\n                FROM {$wpdb-&gt;options}\n                WHERE autoload = 'yes'\n                AND LENGTH(option_value) &gt; %d\n                ORDER BY size_bytes DESC\n                LIMIT 20\",\n                $threshold\n            )\n        );\n\n        if (empty($largeOptions)) {\n            $this-&gt;components-&gt;info('No options exceed the threshold');\n            return 0;\n        }\n<\/code><\/pre>\n<p>El m\u00e9todo <code>$this-&gt;table()<\/code> de Artisan formatea estos resultados como una tabla ASCII: leer datos tabulares en tu terminal es mejor que analizar la salida sin procesar de la consulta:<\/p>\n<pre><code class=\"language-php\">        $this-&gt;newLine();\n        $this-&gt;components-&gt;warn('Large autoloaded options:');\n        $this-&gt;newLine();\n\n        $tableData = [];\n\n        foreach ($largeOptions as $option) {\n            $sizeKb = round($option-&gt;size_bytes \/ 1024, 2);\n            $tableData[] = [\n                $option-&gt;option_name,\n                $sizeKb . ' KB'\n            ];\n        }\n\n        $this-&gt;table(\n            ['Option Name', 'Size'],\n            $tableData\n        );\n<\/code><\/pre>\n<p>El comando lanza una advertencia cuando la carga autom\u00e1tica total supera los 3 MB, lo que indica un problema de rendimiento que debes solucionar:<\/p>\n<pre><code class=\"language-php\">        if ($totalBytes &gt; 3000000) {\n            $this-&gt;newLine();\n            $this-&gt;components-&gt;error('Warning: Total autoload exceeds 3MB');\n        }\n\n        return 0;\n    }\n}\n<\/code><\/pre>\n<p>Para ejecutar la auditor\u00eda, utiliza <code>wp acorn maintenance:audit-autoload --threshold=500000<\/code>.<\/p>\n<h2>C\u00f3mo acceder a los datos de WordPress dentro de los comandos<\/h2>\n<p>Las funciones de WordPress funcionan dentro de tus m\u00e9todos de comando porque Acorn se inicia dentro del ciclo de vida de WordPress. Esto significa que puedes llamar a algunas funciones como <code>get_posts()<\/code> o <code>get_option()<\/code> sin ninguna configuraci\u00f3n especial:<\/p>\n<pre><code class=\"language-php\">public function handle()\n{\n    $posts = get_posts([\n        'post_type' =&gt; 'post',\n        'post_status' =&gt; 'publish',\n        'numberposts' =&gt; 10,\n    ]);\n\n    foreach ($posts as $post) {\n        $this-&gt;line($post-&gt;post_title);\n    }\n\n    return 0;\n}\n<\/code><\/pre>\n<p>Para consultas directas a la base de datos, declara la variable global <code>$wpdb<\/code> al inicio de tu m\u00e9todo:<\/p>\n<pre><code class=\"language-php\">public function handle()\n{\n    global $wpdb;   \n\n    $count = $wpdb-&gt;get_var(\n        \"SELECT COUNT(*) FROM {$wpdb-&gt;posts} WHERE post_status = 'publish'\"\n    );\n\n    $this-&gt;line(\"Published posts: {$count}\");\n\n    return 0;\n}\n<\/code><\/pre>\n<p><code>$wpdb-&gt;prepare()<\/code> es ideal siempre que tus consultas incluyan variables o entradas de usuario, ya que ayuda a evitar ataques de inyecci\u00f3n SQL:<\/p>\n<pre><code class=\"language-php\">$status = 'publish';\n$postType = 'post';\n$results = $wpdb-&gt;get_results(\n    $wpdb-&gt;prepare(\n        \"SELECT ID, post_title FROM {$wpdb-&gt;posts} \n        WHERE post_status = %s AND post_type = %s\",\n        $status,\n        $postType\n    )\n);\n<\/code><\/pre>\n<p>Si realizas una comprobaci\u00f3n de <code>false<\/code> despu\u00e9s de cualquier operaci\u00f3n con la base de datos, esto te permitir\u00e1 detectar errores:<\/p>\n<pre><code class=\"language-php\">$updated = $wpdb-&gt;update(\n    $wpdb-&gt;posts,\n    ['post_status' =&gt; 'draft'],\n    ['ID' =&gt; 123],\n    ['%s'],\n    ['%d']\n);\n\nif ($updated === false) {\n    $this-&gt;components-&gt;error('Database update failed');\n    return 1;\n}\n<\/code><\/pre>\n<p>Los <a href=\"https:\/\/kinsta.com\/es\/blog\/wordpress-tipos-de-postes-personalizados\/\">tipos de entradas personalizadas<\/a> y las taxonom\u00edas funcionan a trav\u00e9s de las funciones est\u00e1ndar de WordPress:<\/p>\n<pre><code class=\"language-php\">$terms = get_terms([\n    'taxonomy' =&gt; 'category',\n    'hide_empty' =&gt; false,\n]);\n\nforeach ($terms as $term) {\n    wp_update_term($term-&gt;term_id, 'category', [\n        'description' =&gt; 'Updated via command',\n    ]);\n}\n<\/code><\/pre>\n<h2>Crear comandos personalizados de WP-CLI es sencillo con Acorn y Artisan Console<\/h2>\n<p><a href=\"https:\/\/roots.io\/acorn\/\" target=\"_blank\" rel=\"noopener noreferrer\">Acorn<\/a> te permite acceder a las clases de comandos estructurados de Laravel, componentes de salida formateados, gesti\u00f3n adecuada de errores y mucho m\u00e1s, a la vez que te da acceso completo a las funciones y datos de WordPress.<\/p>\n<p>Puedes integrar comandos a trav\u00e9s del acceso SSH y la programaci\u00f3n cron dentro de Kinsta. Tambi\u00e9n puedes a\u00f1adir comandos a tus scripts de despliegue para automatizar el mantenimiento, por ejemplo, utilizando los flujos de trabajo de <a href=\"https:\/\/kinsta.com\/blog\/github-actions\/\">GitHub Actions<\/a>.<\/p>\n<p>Si est\u00e1s listo para centralizar tus tareas de mantenimiento de WordPress con comandos WP-CLI personalizados, el <a href=\"https:\/\/kinsta.com\/es\/wordpress-hosting\/\">alojamiento para WordPress administrado de Kinsta<\/a> incluye acceso SSH y WP-CLI en todos los planes.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Probablemente tengas scripts PHP que realizan diversas tareas, como limpiar metadatos de entradas hu\u00e9rfanas o eliminar transitorios caducados. Con el tiempo, esa colecci\u00f3n crece y se &#8230;<\/p>\n","protected":false},"author":287,"featured_media":82251,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kinsta_gated_content":false,"_kinsta_gated_content_redirect":"","footnotes":""},"tags":[],"topic":[1345],"class_list":["post-82250","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","topic-desarrollo-wordpress"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v24.6 (Yoast SEO v24.6) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Crea comandos WP-CLI y automatiza el mantenimiento con Acorn.<\/title>\n<meta name=\"description\" content=\"Con WP-CLI, Acorn y WordPress, puedes crear comandos personalizados que te ayuden con el mantenimiento de tu sitio. Te mostramos c\u00f3mo hacerlo\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/kinsta.com\/es\/blog\/comandos-wp-cli-personalizados-acorn\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"C\u00f3mo crear comandos WP-CLI personalizados y automatizar el mantenimiento de WordPress con Acorn\" \/>\n<meta property=\"og:description\" content=\"Con WP-CLI, Acorn y WordPress, puedes crear comandos personalizados que te ayuden con el mantenimiento de tu sitio. Te mostramos c\u00f3mo hacerlo\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kinsta.com\/es\/blog\/comandos-wp-cli-personalizados-acorn\/\" \/>\n<meta property=\"og:site_name\" content=\"Kinsta\u00ae\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/kinsta.es\/\" \/>\n<meta property=\"article:published_time\" content=\"2026-03-02T06:24:32+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-03-02T07:24:41+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2026\/02\/automating-wordpress-maintenance-with-wp-cli-and-acorn.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1470\" \/>\n\t<meta property=\"og:image:height\" content=\"735\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Joel Olawanle\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:description\" content=\"Con WP-CLI, Acorn y WordPress, puedes crear comandos personalizados que te ayuden con el mantenimiento de tu sitio. Te mostramos c\u00f3mo hacerlo\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2026\/02\/automating-wordpress-maintenance-with-wp-cli-and-acorn.png\" \/>\n<meta name=\"twitter:creator\" content=\"@olawanle_joel\" \/>\n<meta name=\"twitter:site\" content=\"@Kinsta_ES\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Joel Olawanle\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data2\" content=\"12 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/kinsta.com\/es\/blog\/comandos-wp-cli-personalizados-acorn\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/es\/blog\/comandos-wp-cli-personalizados-acorn\/\"},\"author\":{\"name\":\"Joel Olawanle\",\"@id\":\"https:\/\/kinsta.com\/es\/#\/schema\/person\/efa7de30245ca15be5ce1dcacff89c07\"},\"headline\":\"C\u00f3mo crear comandos WP-CLI personalizados y automatizar el mantenimiento de WordPress con Acorn\",\"datePublished\":\"2026-03-02T06:24:32+00:00\",\"dateModified\":\"2026-03-02T07:24:41+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/kinsta.com\/es\/blog\/comandos-wp-cli-personalizados-acorn\/\"},\"wordCount\":1399,\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/es\/#organization\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/es\/blog\/comandos-wp-cli-personalizados-acorn\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2026\/02\/automating-wordpress-maintenance-with-wp-cli-and-acorn.png\",\"inLanguage\":\"es\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/kinsta.com\/es\/blog\/comandos-wp-cli-personalizados-acorn\/\",\"url\":\"https:\/\/kinsta.com\/es\/blog\/comandos-wp-cli-personalizados-acorn\/\",\"name\":\"Crea comandos WP-CLI y automatiza el mantenimiento con Acorn.\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/es\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/kinsta.com\/es\/blog\/comandos-wp-cli-personalizados-acorn\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/es\/blog\/comandos-wp-cli-personalizados-acorn\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2026\/02\/automating-wordpress-maintenance-with-wp-cli-and-acorn.png\",\"datePublished\":\"2026-03-02T06:24:32+00:00\",\"dateModified\":\"2026-03-02T07:24:41+00:00\",\"description\":\"Con WP-CLI, Acorn y WordPress, puedes crear comandos personalizados que te ayuden con el mantenimiento de tu sitio. Te mostramos c\u00f3mo hacerlo\",\"breadcrumb\":{\"@id\":\"https:\/\/kinsta.com\/es\/blog\/comandos-wp-cli-personalizados-acorn\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/kinsta.com\/es\/blog\/comandos-wp-cli-personalizados-acorn\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/kinsta.com\/es\/blog\/comandos-wp-cli-personalizados-acorn\/#primaryimage\",\"url\":\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2026\/02\/automating-wordpress-maintenance-with-wp-cli-and-acorn.png\",\"contentUrl\":\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2026\/02\/automating-wordpress-maintenance-with-wp-cli-and-acorn.png\",\"width\":1470,\"height\":735},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/kinsta.com\/es\/blog\/comandos-wp-cli-personalizados-acorn\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/kinsta.com\/es\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Desarrollo WordPress\",\"item\":\"https:\/\/kinsta.com\/es\/secciones\/desarrollo-wordpress\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"C\u00f3mo crear comandos WP-CLI personalizados y automatizar el mantenimiento de WordPress con Acorn\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/kinsta.com\/es\/#website\",\"url\":\"https:\/\/kinsta.com\/es\/\",\"name\":\"Kinsta\u00ae\",\"description\":\"Soluciones de alojamiento premium, r\u00e1pidas y seguras\",\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/es\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/kinsta.com\/es\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/kinsta.com\/es\/#organization\",\"name\":\"Kinsta\",\"url\":\"https:\/\/kinsta.com\/es\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/kinsta.com\/es\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/12\/kinsta-logo.jpeg\",\"contentUrl\":\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/12\/kinsta-logo.jpeg\",\"width\":500,\"height\":500,\"caption\":\"Kinsta\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/es\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/kinsta.es\/\",\"https:\/\/x.com\/Kinsta_ES\",\"https:\/\/www.instagram.com\/kinstahosting\/\",\"https:\/\/www.linkedin.com\/company\/kinsta\/\",\"https:\/\/www.pinterest.com\/kinstahosting\/\",\"https:\/\/www.youtube.com\/c\/Kinsta\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/kinsta.com\/es\/#\/schema\/person\/efa7de30245ca15be5ce1dcacff89c07\",\"name\":\"Joel Olawanle\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/kinsta.com\/es\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/051bf577ce2c837846a1db9eef184758?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/051bf577ce2c837846a1db9eef184758?s=96&d=mm&r=g\",\"caption\":\"Joel Olawanle\"},\"description\":\"Joel is a Frontend developer working at Kinsta as a Technical Editor. He is a passionate teacher with love for open source and has written over 300 technical articles majorly around JavaScript and it's frameworks.\",\"sameAs\":[\"https:\/\/joelolawanle.com\/\",\"https:\/\/www.linkedin.com\/in\/olawanlejoel\/\",\"https:\/\/x.com\/olawanle_joel\",\"https:\/\/www.youtube.com\/@joelolawanle\"],\"gender\":\"male\",\"knowsAbout\":[\"JavaScript\",\"React\",\"Next.js\"],\"knowsLanguage\":[\"English\"],\"jobTitle\":\"Technical Editor\",\"worksFor\":\"Kinsta\",\"url\":\"https:\/\/kinsta.com\/es\/blog\/author\/joelolawanle\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Crea comandos WP-CLI y automatiza el mantenimiento con Acorn.","description":"Con WP-CLI, Acorn y WordPress, puedes crear comandos personalizados que te ayuden con el mantenimiento de tu sitio. Te mostramos c\u00f3mo hacerlo","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/kinsta.com\/es\/blog\/comandos-wp-cli-personalizados-acorn\/","og_locale":"es_ES","og_type":"article","og_title":"C\u00f3mo crear comandos WP-CLI personalizados y automatizar el mantenimiento de WordPress con Acorn","og_description":"Con WP-CLI, Acorn y WordPress, puedes crear comandos personalizados que te ayuden con el mantenimiento de tu sitio. Te mostramos c\u00f3mo hacerlo","og_url":"https:\/\/kinsta.com\/es\/blog\/comandos-wp-cli-personalizados-acorn\/","og_site_name":"Kinsta\u00ae","article_publisher":"https:\/\/www.facebook.com\/kinsta.es\/","article_published_time":"2026-03-02T06:24:32+00:00","article_modified_time":"2026-03-02T07:24:41+00:00","og_image":[{"width":1470,"height":735,"url":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2026\/02\/automating-wordpress-maintenance-with-wp-cli-and-acorn.png","type":"image\/png"}],"author":"Joel Olawanle","twitter_card":"summary_large_image","twitter_description":"Con WP-CLI, Acorn y WordPress, puedes crear comandos personalizados que te ayuden con el mantenimiento de tu sitio. Te mostramos c\u00f3mo hacerlo","twitter_image":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2026\/02\/automating-wordpress-maintenance-with-wp-cli-and-acorn.png","twitter_creator":"@olawanle_joel","twitter_site":"@Kinsta_ES","twitter_misc":{"Escrito por":"Joel Olawanle","Tiempo de lectura":"12 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kinsta.com\/es\/blog\/comandos-wp-cli-personalizados-acorn\/#article","isPartOf":{"@id":"https:\/\/kinsta.com\/es\/blog\/comandos-wp-cli-personalizados-acorn\/"},"author":{"name":"Joel Olawanle","@id":"https:\/\/kinsta.com\/es\/#\/schema\/person\/efa7de30245ca15be5ce1dcacff89c07"},"headline":"C\u00f3mo crear comandos WP-CLI personalizados y automatizar el mantenimiento de WordPress con Acorn","datePublished":"2026-03-02T06:24:32+00:00","dateModified":"2026-03-02T07:24:41+00:00","mainEntityOfPage":{"@id":"https:\/\/kinsta.com\/es\/blog\/comandos-wp-cli-personalizados-acorn\/"},"wordCount":1399,"publisher":{"@id":"https:\/\/kinsta.com\/es\/#organization"},"image":{"@id":"https:\/\/kinsta.com\/es\/blog\/comandos-wp-cli-personalizados-acorn\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2026\/02\/automating-wordpress-maintenance-with-wp-cli-and-acorn.png","inLanguage":"es"},{"@type":"WebPage","@id":"https:\/\/kinsta.com\/es\/blog\/comandos-wp-cli-personalizados-acorn\/","url":"https:\/\/kinsta.com\/es\/blog\/comandos-wp-cli-personalizados-acorn\/","name":"Crea comandos WP-CLI y automatiza el mantenimiento con Acorn.","isPartOf":{"@id":"https:\/\/kinsta.com\/es\/#website"},"primaryImageOfPage":{"@id":"https:\/\/kinsta.com\/es\/blog\/comandos-wp-cli-personalizados-acorn\/#primaryimage"},"image":{"@id":"https:\/\/kinsta.com\/es\/blog\/comandos-wp-cli-personalizados-acorn\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2026\/02\/automating-wordpress-maintenance-with-wp-cli-and-acorn.png","datePublished":"2026-03-02T06:24:32+00:00","dateModified":"2026-03-02T07:24:41+00:00","description":"Con WP-CLI, Acorn y WordPress, puedes crear comandos personalizados que te ayuden con el mantenimiento de tu sitio. Te mostramos c\u00f3mo hacerlo","breadcrumb":{"@id":"https:\/\/kinsta.com\/es\/blog\/comandos-wp-cli-personalizados-acorn\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kinsta.com\/es\/blog\/comandos-wp-cli-personalizados-acorn\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/kinsta.com\/es\/blog\/comandos-wp-cli-personalizados-acorn\/#primaryimage","url":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2026\/02\/automating-wordpress-maintenance-with-wp-cli-and-acorn.png","contentUrl":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2026\/02\/automating-wordpress-maintenance-with-wp-cli-and-acorn.png","width":1470,"height":735},{"@type":"BreadcrumbList","@id":"https:\/\/kinsta.com\/es\/blog\/comandos-wp-cli-personalizados-acorn\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/kinsta.com\/es\/"},{"@type":"ListItem","position":2,"name":"Desarrollo WordPress","item":"https:\/\/kinsta.com\/es\/secciones\/desarrollo-wordpress\/"},{"@type":"ListItem","position":3,"name":"C\u00f3mo crear comandos WP-CLI personalizados y automatizar el mantenimiento de WordPress con Acorn"}]},{"@type":"WebSite","@id":"https:\/\/kinsta.com\/es\/#website","url":"https:\/\/kinsta.com\/es\/","name":"Kinsta\u00ae","description":"Soluciones de alojamiento premium, r\u00e1pidas y seguras","publisher":{"@id":"https:\/\/kinsta.com\/es\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/kinsta.com\/es\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Organization","@id":"https:\/\/kinsta.com\/es\/#organization","name":"Kinsta","url":"https:\/\/kinsta.com\/es\/","logo":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/kinsta.com\/es\/#\/schema\/logo\/image\/","url":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/12\/kinsta-logo.jpeg","contentUrl":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/12\/kinsta-logo.jpeg","width":500,"height":500,"caption":"Kinsta"},"image":{"@id":"https:\/\/kinsta.com\/es\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/kinsta.es\/","https:\/\/x.com\/Kinsta_ES","https:\/\/www.instagram.com\/kinstahosting\/","https:\/\/www.linkedin.com\/company\/kinsta\/","https:\/\/www.pinterest.com\/kinstahosting\/","https:\/\/www.youtube.com\/c\/Kinsta"]},{"@type":"Person","@id":"https:\/\/kinsta.com\/es\/#\/schema\/person\/efa7de30245ca15be5ce1dcacff89c07","name":"Joel Olawanle","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/kinsta.com\/es\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/051bf577ce2c837846a1db9eef184758?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/051bf577ce2c837846a1db9eef184758?s=96&d=mm&r=g","caption":"Joel Olawanle"},"description":"Joel is a Frontend developer working at Kinsta as a Technical Editor. He is a passionate teacher with love for open source and has written over 300 technical articles majorly around JavaScript and it's frameworks.","sameAs":["https:\/\/joelolawanle.com\/","https:\/\/www.linkedin.com\/in\/olawanlejoel\/","https:\/\/x.com\/olawanle_joel","https:\/\/www.youtube.com\/@joelolawanle"],"gender":"male","knowsAbout":["JavaScript","React","Next.js"],"knowsLanguage":["English"],"jobTitle":"Technical Editor","worksFor":"Kinsta","url":"https:\/\/kinsta.com\/es\/blog\/author\/joelolawanle\/"}]}},"acf":[],"_links":{"self":[{"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/posts\/82250","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/users\/287"}],"replies":[{"embeddable":true,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/comments?post=82250"}],"version-history":[{"count":6,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/posts\/82250\/revisions"}],"predecessor-version":[{"id":82319,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/posts\/82250\/revisions\/82319"}],"alternate":[{"embeddable":true,"hreflang":"en","title":"English","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/82250\/translations\/en"},{"embeddable":true,"hreflang":"it","title":"Italian","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/82250\/translations\/it"},{"embeddable":true,"hreflang":"pt","title":"Portuguese","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/82250\/translations\/pt"},{"embeddable":true,"hreflang":"fr","title":"French","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/82250\/translations\/fr"},{"embeddable":true,"hreflang":"de","title":"German","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/82250\/translations\/de"},{"embeddable":true,"hreflang":"ja","title":"Japanese","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/82250\/translations\/jp"},{"embeddable":true,"hreflang":"nl","title":"Dutch","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/82250\/translations\/nl"},{"embeddable":true,"hreflang":"es","title":"Spanish","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/82250\/translations\/es"},{"href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/82250\/tree"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/media\/82251"}],"wp:attachment":[{"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/media?parent=82250"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/tags?post=82250"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/topic?post=82250"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}