{"id":74614,"date":"2026-02-25T07:02:52","date_gmt":"2026-02-25T10:02:52","guid":{"rendered":"https:\/\/kinsta.com\/pt\/?p=74614&#038;preview=true&#038;preview_id=74614"},"modified":"2026-03-02T11:16:48","modified_gmt":"2026-03-02T14:16:48","slug":"comandos-wp-cli-personalizados-acorn","status":"publish","type":"post","link":"https:\/\/kinsta.com\/pt\/blog\/comandos-wp-cli-personalizados-acorn\/","title":{"rendered":"Como criar comandos WP-CLI personalizados e automatizar a manuten\u00e7\u00e3o do WordPress com o Acorn"},"content":{"rendered":"<p>Voc\u00ea provavelmente tem scripts em PHP que executam diversas tarefas, como limpar metadados \u00f3rf\u00e3os de artigos ou excluir transients expirados. Com o tempo, essa cole\u00e7\u00e3o cresce e passa a viver em um arquivo de tema, em uma pasta de plugin ou em algum diret\u00f3rio pouco acess\u00edvel. O Acorn ajuda a organizar essa desordem ao trazer o Artisan Console do Laravel para o WordPress.<\/p>\n<p>Isso significa que voc\u00ea pode criar comandos WP-CLI personalizados com arquivos de classe estruturados que centralizam sua l\u00f3gica de manuten\u00e7\u00e3o. Esses comandos s\u00e3o executados de forma consistente em desenvolvimento, teste e produ\u00e7\u00e3o, usando indicadores de progresso, sa\u00edda em tabela formatada, tratamento adequado de erros e muito mais. Em seguida, voc\u00ea pode acion\u00e1-los via SSH, agend\u00e1-los com cron jobs ou execut\u00e1-los durante implanta\u00e7\u00f5es.<\/p>\n<div><\/div><kinsta-auto-toc heading=\"Table of Contents\" list-style=\"arrow\" selector=\"h2\" count-number=\"-1\"><\/kinsta-auto-toc>\n<h2>Como instalar o Acorn e executar comandos<\/h2>\n<p>O primeiro passo \u00e9 instalar as depend\u00eancias necess\u00e1rias. O Acorn precisa do <a href=\"https:\/\/kinsta.com\/pt\/blog\/php-8-2\/\">PHP 8.2<\/a> ou superior, do <a href=\"https:\/\/kinsta.com\/pt\/blog\/instalar-composer\/\">Composer<\/a> para gerenciar depend\u00eancias e do <a href=\"https:\/\/kinsta.com\/pt\/blog\/wp-cli-v2\/\">WP-CLI<\/a> em execu\u00e7\u00e3o no seu servidor. A Kinsta inclui o WP-CLI em todos os planos de hospedagem, para que voc\u00ea possa come\u00e7ar a criar comandos imediatamente.<\/p>\n<p>Voc\u00ea instala o Acorn via Composer usando <code>composer require roots\/acorn<\/code> na raiz do projeto. Em seguida, adicione o c\u00f3digo de inicializa\u00e7\u00e3o ao arquivo functions.php do seu tema ou ao arquivo principal do seu plugin:<\/p>\n<pre><code class=\"language-php\">&lt;?php\nuse Roots\\Acorn\\Application;\nif (! class_exists(\\Roots\\Acorn\\Application::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            App\\Providers\\ThemeServiceProvider::class,\n        ])\n        -&gt;boot();\n}, 0);\n<\/code><\/pre>\n<p>A configura\u00e7\u00e3o sem necessidade de ajustes armazena o cache do aplicativo e os registros no <a href=\"https:\/\/kinsta.com\/pt\/blog\/cache-wordpress\/\">diret\u00f3rio de cache do WordPress<\/a> em <code>[wp-content]\/cache\/acorn\/<\/code>, com seus comandos no diret\u00f3rio <code>app\/<\/code> do tema.<\/p>\n<p>A estrutura tradicional segue as conven\u00e7\u00f5es do Laravel, como diret\u00f3rios dedicados para <code>app\/<\/code>, <code>config\/<\/code>, <code>storage\/<\/code> e <code>resources\/<\/code> na raiz do seu projeto. Voc\u00ea configura isso com uma linha:<\/p>\n<pre><code class=\"language-bash\">wp acorn acorn:init storage && wp acorn vendor:publish --tag=acorn\n<\/code><\/pre>\n<p>Se voc\u00ea executar <code>wp acorn list<\/code>, isso verificar\u00e1 sua instala\u00e7\u00e3o, exibindo todos os comandos Acorn dispon\u00edveis. A partir desse ponto, todos os comandos personalizados que voc\u00ea criar ser\u00e3o armazenados no diret\u00f3rio <code>app\/Console\/Commands\/<\/code>. O Acorn descobre automaticamente todas as classes de comando nesse local e as registra no WP-CLI.<\/p>\n<aside role=\"note\" class=\"wp-block-kinsta-notice is-style-info\">\n            <h3>Info<\/h3>\n        <p>Voc\u00ea se conecta ao seu servidor por meio de SSH e executa <code>wp acorn<\/code> seguido do nome do comando. Para clientes da Kinsta, os <a href=\"https:\/\/kinsta.com\/help\/connect-to-ssh\/\">detalhes da conex\u00e3o SSH<\/a> est\u00e3o em seu painel MyKinsta.<\/p>\n<\/aside>\n\n<h2>Criando seu primeiro comando Artisan<\/h2>\n<p>O comando <code>wp acorn make:command CleanupCommand<\/code> Artisan gera seu arquivo com a estrutura que voc\u00ea precisa. Ele cont\u00e9m tr\u00eas elementos-chave que todo comando Artisan precisa:<\/p>\n<ul>\n<li>Uma propriedade <code>$signature<\/code> que define o nome do comando e suas op\u00e7\u00f5es.<\/li>\n<li>A propriedade <code>$description<\/code> para o texto de ajuda.<\/li>\n<li>Um m\u00e9todo <code>handle()<\/code> onde a l\u00f3gica do seu comando reside.<\/li>\n<\/ul>\n<p>Nesse caso, ele cria <code>app\/Console\/Commands\/CleanupCommand.php<\/code> com uma estrutura b\u00e1sica de comando:<\/p>\n<pre><code class=\"language-php\">&lt;?php\nnamespace App\\Console\\Commands;\nuse Illuminate\\Console\\Command;\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>A propriedade <code>$signature<\/code> usa uma sintaxe espec\u00edfica:<\/p>\n<ul>\n<li>Um comando b\u00e1sico precisa apenas de um nome, como <code>cleanup:run<\/code>.<\/li>\n<li>Voc\u00ea adiciona argumentos obrigat\u00f3rios envolvendo-os em chaves, por exemplo <code>cleanup:run {days}<\/code>.<\/li>\n<li>Argumentos opcionais recebem um ponto de interroga\u00e7\u00e3o: <code>cleanup:run {days?}<\/code>.<\/li>\n<li>Op\u00e7\u00f5es usam dois h\u00edfens: <code>cleanup:run {--force} {--limit=100}<\/code>.<\/li>\n<\/ul>\n<p>Em seguida, inclua uma descri\u00e7\u00e3o do comando e sua 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>Voc\u00ea pode testar isso usando <code>wp acorn cleanup:test --dry-run<\/code>. O comando exibe mensagens formatadas usando o sistema de componentes do Artisan. O m\u00e9todo <code>$this-&gt;components-&gt;info()<\/code> mostra mensagens de sucesso em verde. Voc\u00ea tamb\u00e9m pode usar <code>$this-&gt;components-&gt;error()<\/code> para erros, <code>$this-&gt;components-&gt;warn()<\/code> para avisos e <code>$this-&gt;line()<\/code> para sa\u00edda de texto simples.<\/p>\n<h2>Como criar 3 comandos pr\u00e1ticos de manuten\u00e7\u00e3o<\/h2>\n<p>A seguir est\u00e3o alguns exemplos que ajudam voc\u00ea a lidar com tarefas de manuten\u00e7\u00e3o de banco de dados que surgem em muitos sites WordPress.<\/p>\n<p>Embora cada comando inclua tratamento de erros e, em grande parte, siga os padr\u00f5es de codifica\u00e7\u00e3o do WordPress para manter seus dados seguros, voc\u00ea ainda deve us\u00e1-los como base para seus pr\u00f3prios projetos, em vez de simplesmente copi\u00e1-los e col\u00e1-los.<\/p>\n<h3>1. Limpando metadados \u00f3rf\u00e3os de artigos<\/h3>\n<p>Os <a href=\"https:\/\/kinsta.com\/pt\/blog\/data-atualizada-em-artigos-e-paginas-wordpress\/\">metadados<\/a> de artigos permanecem no banco de dados ap\u00f3s a exclus\u00e3o dos artigos. Isso acontece quando plugins ignoram os hooks de exclus\u00e3o do WordPress e deixam entradas de metadados apontando para artigos que j\u00e1 n\u00e3o existem mais. Com o tempo, esse incha\u00e7o desacelera suas consultas ao banco de dados.<\/p>\n<p>Depois de criar o comando com <code>wp acorn make:command CleanupOrphanedMeta<\/code>, voc\u00ea pode come\u00e7ar com a estrutura da classe do comando e sua assinatura:<\/p>\n<pre><code class=\"language-php\">&lt;?php\nnamespace App\\Console\\Commands;\nuse Illuminate\\Console\\Command;\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>O comando usa uma consulta com <code>LEFT JOIN<\/code> para encontrar esses registros \u00f3rf\u00e3os. O padr\u00e3o verifica valores <code>NULL<\/code> na tabela posts. Se o join retornar <code>NULL<\/code>, os metadados pertencem a um artigo exclu\u00eddo:<\/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>Quando o comando encontra \u00f3rf\u00e3os, ele mostra uma contagem e exibe alguns registros de exemplo se voc\u00ea estiver no modo dry-run. Voc\u00ea precisa verificar o que est\u00e1 sendo exclu\u00eddo antes de confirmar:<\/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>A exclus\u00e3o real usa <code>$wpdb-&gt;prepare()<\/code> para evitar ataques de <a href=\"https:\/\/kinsta.com\/pt\/blog\/injecao-sql\/\">inje\u00e7\u00e3o de SQL<\/a>. O comando processa 1.000 registros por vez, o que evita problemas de mem\u00f3ria em sites com milh\u00f5es de entradas de metadados:<\/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 executar o comando, use <code>wp acorn maintenance:cleanup-orphaned-meta --dry-run<\/code>.<\/p>\n<h3>2. Excluindo transients expirados<\/h3>\n<p>O WordPress armazena <a href=\"https:\/\/developer.wordpress.org\/apis\/transients\/\" target=\"_blank\" rel=\"noopener noreferrer\">transients<\/a> em <code>wp_options<\/code> com datas de expira\u00e7\u00e3o. Embora um <a href=\"https:\/\/kinsta.com\/pt\/blog\/wordpress-cron-job\/\">cron job<\/a> di\u00e1rio limpe esses dados, \u00e0s vezes \u00e9 necess\u00e1rio executar uma limpeza manual durante janelas de manuten\u00e7\u00e3o ou quando o incha\u00e7o de transients se torna um problema.<\/p>\n<p>Depois de gerar o comando com <code>wp acorn make:command CleanupTransients<\/code>, voc\u00ea pode configurar a estrutura do comando:<\/p>\n<pre><code class=\"language-php\">&lt;?php\nnamespace App\\Console\\Commands;\nuse Illuminate\\Console\\Command;\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>Essa consulta de exclus\u00e3o usa a sintaxe <code>DELETE<\/code> de v\u00e1rias tabelas para remover o transiente e sua op\u00e7\u00e3o de tempo limite de uma s\u00f3 vez. A consulta encontra registros de tempo limite em que o carimbo de data\/hora de expira\u00e7\u00e3o j\u00e1 passou:<\/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>Verifique tamb\u00e9m se h\u00e1 erros e acompanhe a contagem de exclus\u00f5es:<\/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>Em <a href=\"https:\/\/kinsta.com\/pt\/blog\/wordpress-multisite\/\">instala\u00e7\u00f5es Multisite<\/a>, o comando executa uma segunda consulta para transients do site. Eles usam prefixos de tabela diferentes, mas seguem o mesmo padr\u00e3o de exclus\u00e3o:<\/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 executar o comando, execute <code>wp acorn maintenance:cleanup-transients<\/code>.<\/p>\n<h3>3. Auditando op\u00e7\u00f5es com autoload<\/h3>\n<p><a href=\"https:\/\/kinsta.com\/pt\/blog\/wp-options-dados-carregados-automaticamente\/\">Op\u00e7\u00f5es com autoload<\/a> s\u00e3o carregadas em todas as requisi\u00e7\u00f5es que o seu site WordPress processa. Voc\u00ea pode come\u00e7ar a perceber lentid\u00e3o e picos de consumo de mem\u00f3ria quando esses dados ultrapassam 1MB. Este comando encontra suas maiores op\u00e7\u00f5es com autoload para que voc\u00ea possa identificar quais plugins est\u00e3o causando o incha\u00e7o.<\/p>\n<p>Primeiro, crie o comando de auditoria com <code>wp acorn make:command AuditAutoload<\/code>. Em seguida, defina a assinatura do comando com um limite configur\u00e1vel:<\/p>\n<pre><code class=\"language-php\">&lt;?php\nnamespace App\\Console\\Commands;\nuse Illuminate\\Console\\Command;\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 da\u00ed, calcule o tamanho total de todas as op\u00e7\u00f5es com autoload:<\/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>O comando executa uma consulta para op\u00e7\u00f5es acima do seu limite, ordena por tamanho e limita os resultados \u00e0s 20 maiores:<\/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>O m\u00e9todo <code>$this-&gt;table()<\/code> do Artisan formata esses resultados como uma tabela ASCII: ler dados tabulares no seu terminal \u00e9 melhor do que analisar a sa\u00edda bruta da 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>O comando gera um aviso quando o total de autoload ultrapassa 3MB, o que indica um problema de desempenho que voc\u00ea precisa resolver:<\/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 executar a auditoria, use <code>wp acorn maintenance:audit-autoload --threshold=500000<\/code>.<\/p>\n<h2>Como acessar dados do WordPress dentro dos comandos<\/h2>\n<p>As fun\u00e7\u00f5es do WordPress funcionam dentro dos m\u00e9todos do seu comando porque o Acorn \u00e9 inicializado dentro do ciclo de vida do WordPress. Isso significa que voc\u00ea pode chamar fun\u00e7\u00f5es como <code>get_posts()<\/code> ou <code>get_option()<\/code> sem nenhuma configura\u00e7\u00e3o 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 diretas ao banco de dados, declare o global <code>$wpdb<\/code> no in\u00edcio do seu 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> \u00e9 ideal sempre que suas consultas inclu\u00edrem vari\u00e1veis ou entrada do usu\u00e1rio, pois ajuda a evitar ataques de inje\u00e7\u00e3o de 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>Se voc\u00ea verificar false ap\u00f3s qualquer opera\u00e7\u00e3o no banco de dados, isso permitir\u00e1 capturar erros:<\/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>Os <a href=\"https:\/\/kinsta.com\/pt\/blog\/tipos-publicacoes-personalizadas-wordpress\/\">tipos de post personalizados<\/a> e taxonomias funcionam por meio das fun\u00e7\u00f5es padr\u00e3o do 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>Comandos WP-CLI personalizados s\u00e3o simples com Acorn e Artisan Console<\/h2>\n<p>O <a href=\"https:\/\/roots.io\/acorn\/\" target=\"_blank\" rel=\"noopener noreferrer\">Acorn<\/a> permite que voc\u00ea utilize as classes de comando estruturadas do Laravel, componentes de sa\u00edda formatada, tratamento adequado de erros e muito mais, ao mesmo tempo em que oferece acesso completo \u00e0s fun\u00e7\u00f5es e aos dados do WordPress.<\/p>\n<p>Voc\u00ea pode integrar comandos por meio de acesso SSH e agendamento com cron dentro da Kinsta. Voc\u00ea tamb\u00e9m pode adicionar comandos aos seus scripts de implanta\u00e7\u00e3o para automatizar a manuten\u00e7\u00e3o, por exemplo, usando fluxos de trabalho do <a href=\"https:\/\/kinsta.com\/blog\/github-actions\/\">GitHub Actions<\/a>.<\/p>\n<p>Se voc\u00ea est\u00e1 pronto para centralizar suas tarefas de manuten\u00e7\u00e3o do WordPress com comandos WP-CLI personalizados, a <a href=\"https:\/\/kinsta.com\/pt\/hospedagem-wordpress\/\">hospedagem gerenciada para WordPress da Kinsta<\/a> inclui acesso SSH e WP-CLI em todos os planos.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Voc\u00ea provavelmente tem scripts em PHP que executam diversas tarefas, como limpar metadados \u00f3rf\u00e3os de artigos ou excluir transients expirados. Com o tempo, essa cole\u00e7\u00e3o cresce &#8230;<\/p>\n","protected":false},"author":287,"featured_media":74615,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kinsta_gated_content":false,"_kinsta_gated_content_redirect":"","footnotes":""},"tags":[],"topic":[1026],"class_list":["post-74614","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","topic-desenvolvimento-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>Como criar comandos WP-CLI personalizados e automatizar a manuten\u00e7\u00e3o do WordPress com o Acorn<\/title>\n<meta name=\"description\" content=\"Entre WP-CLI, Acorn e WordPress, voc\u00ea pode criar comandos personalizados que ajudam na manuten\u00e7\u00e3o do site. Este artigo mostra como fazer isso.\" \/>\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\/pt\/blog\/comandos-wp-cli-personalizados-acorn\/\" \/>\n<meta property=\"og:locale\" content=\"pt_PT\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Como criar comandos WP-CLI personalizados e automatizar a manuten\u00e7\u00e3o do WordPress com o Acorn\" \/>\n<meta property=\"og:description\" content=\"Entre WP-CLI, Acorn e WordPress, voc\u00ea pode criar comandos personalizados que ajudam na manuten\u00e7\u00e3o do site. Este artigo mostra como fazer isso.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kinsta.com\/pt\/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\/kinstapt\/\" \/>\n<meta property=\"article:published_time\" content=\"2026-02-25T10:02:52+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-03-02T14:16:48+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/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=\"Entre WP-CLI, Acorn e WordPress, voc\u00ea pode criar comandos personalizados que ajudam na manuten\u00e7\u00e3o do site. Este artigo mostra como fazer isso.\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2026\/02\/automating-wordpress-maintenance-with-wp-cli-and-acorn-1024x512.png\" \/>\n<meta name=\"twitter:creator\" content=\"@olawanle_joel\" \/>\n<meta name=\"twitter:site\" content=\"@kinsta_pt\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Joel Olawanle\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tempo estimado de leitura\" \/>\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\/pt\/blog\/comandos-wp-cli-personalizados-acorn\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/comandos-wp-cli-personalizados-acorn\/\"},\"author\":{\"name\":\"Joel Olawanle\",\"@id\":\"https:\/\/kinsta.com\/pt\/#\/schema\/person\/efa7de30245ca15be5ce1dcacff89c07\"},\"headline\":\"Como criar comandos WP-CLI personalizados e automatizar a manuten\u00e7\u00e3o do WordPress com o Acorn\",\"datePublished\":\"2026-02-25T10:02:52+00:00\",\"dateModified\":\"2026-03-02T14:16:48+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/comandos-wp-cli-personalizados-acorn\/\"},\"wordCount\":1398,\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/pt\/#organization\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/comandos-wp-cli-personalizados-acorn\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2026\/02\/automating-wordpress-maintenance-with-wp-cli-and-acorn.png\",\"inLanguage\":\"pt-PT\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/comandos-wp-cli-personalizados-acorn\/\",\"url\":\"https:\/\/kinsta.com\/pt\/blog\/comandos-wp-cli-personalizados-acorn\/\",\"name\":\"Como criar comandos WP-CLI personalizados e automatizar a manuten\u00e7\u00e3o do WordPress com o Acorn\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/pt\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/comandos-wp-cli-personalizados-acorn\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/comandos-wp-cli-personalizados-acorn\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2026\/02\/automating-wordpress-maintenance-with-wp-cli-and-acorn.png\",\"datePublished\":\"2026-02-25T10:02:52+00:00\",\"dateModified\":\"2026-03-02T14:16:48+00:00\",\"description\":\"Entre WP-CLI, Acorn e WordPress, voc\u00ea pode criar comandos personalizados que ajudam na manuten\u00e7\u00e3o do site. Este artigo mostra como fazer isso.\",\"breadcrumb\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/comandos-wp-cli-personalizados-acorn\/#breadcrumb\"},\"inLanguage\":\"pt-PT\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/kinsta.com\/pt\/blog\/comandos-wp-cli-personalizados-acorn\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-PT\",\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/comandos-wp-cli-personalizados-acorn\/#primaryimage\",\"url\":\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2026\/02\/automating-wordpress-maintenance-with-wp-cli-and-acorn.png\",\"contentUrl\":\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2026\/02\/automating-wordpress-maintenance-with-wp-cli-and-acorn.png\",\"width\":1470,\"height\":735},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/comandos-wp-cli-personalizados-acorn\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/kinsta.com\/pt\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Desenvolvimento WordPress\",\"item\":\"https:\/\/kinsta.com\/pt\/topicos\/desenvolvimento-wordpress\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Como criar comandos WP-CLI personalizados e automatizar a manuten\u00e7\u00e3o do WordPress com o Acorn\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/kinsta.com\/pt\/#website\",\"url\":\"https:\/\/kinsta.com\/pt\/\",\"name\":\"Kinsta\u00ae\",\"description\":\"Solu\u00e7\u00f5es de hospedagem Premium, r\u00e1pida e segura\",\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/pt\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/kinsta.com\/pt\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pt-PT\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/kinsta.com\/pt\/#organization\",\"name\":\"Kinsta\",\"url\":\"https:\/\/kinsta.com\/pt\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-PT\",\"@id\":\"https:\/\/kinsta.com\/pt\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/12\/kinsta-logo.jpeg\",\"contentUrl\":\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/12\/kinsta-logo.jpeg\",\"width\":500,\"height\":500,\"caption\":\"Kinsta\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/pt\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/kinstapt\/\",\"https:\/\/x.com\/kinsta_pt\",\"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\/pt\/#\/schema\/person\/efa7de30245ca15be5ce1dcacff89c07\",\"name\":\"Joel Olawanle\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-PT\",\"@id\":\"https:\/\/kinsta.com\/pt\/#\/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\/pt\/blog\/author\/joelolawanle\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Como criar comandos WP-CLI personalizados e automatizar a manuten\u00e7\u00e3o do WordPress com o Acorn","description":"Entre WP-CLI, Acorn e WordPress, voc\u00ea pode criar comandos personalizados que ajudam na manuten\u00e7\u00e3o do site. Este artigo mostra como fazer isso.","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\/pt\/blog\/comandos-wp-cli-personalizados-acorn\/","og_locale":"pt_PT","og_type":"article","og_title":"Como criar comandos WP-CLI personalizados e automatizar a manuten\u00e7\u00e3o do WordPress com o Acorn","og_description":"Entre WP-CLI, Acorn e WordPress, voc\u00ea pode criar comandos personalizados que ajudam na manuten\u00e7\u00e3o do site. Este artigo mostra como fazer isso.","og_url":"https:\/\/kinsta.com\/pt\/blog\/comandos-wp-cli-personalizados-acorn\/","og_site_name":"Kinsta\u00ae","article_publisher":"https:\/\/www.facebook.com\/kinstapt\/","article_published_time":"2026-02-25T10:02:52+00:00","article_modified_time":"2026-03-02T14:16:48+00:00","og_image":[{"width":1470,"height":735,"url":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2026\/02\/automating-wordpress-maintenance-with-wp-cli-and-acorn.png","type":"image\/png"}],"author":"Joel Olawanle","twitter_card":"summary_large_image","twitter_description":"Entre WP-CLI, Acorn e WordPress, voc\u00ea pode criar comandos personalizados que ajudam na manuten\u00e7\u00e3o do site. Este artigo mostra como fazer isso.","twitter_image":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2026\/02\/automating-wordpress-maintenance-with-wp-cli-and-acorn-1024x512.png","twitter_creator":"@olawanle_joel","twitter_site":"@kinsta_pt","twitter_misc":{"Escrito por":"Joel Olawanle","Tempo estimado de leitura":"12 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kinsta.com\/pt\/blog\/comandos-wp-cli-personalizados-acorn\/#article","isPartOf":{"@id":"https:\/\/kinsta.com\/pt\/blog\/comandos-wp-cli-personalizados-acorn\/"},"author":{"name":"Joel Olawanle","@id":"https:\/\/kinsta.com\/pt\/#\/schema\/person\/efa7de30245ca15be5ce1dcacff89c07"},"headline":"Como criar comandos WP-CLI personalizados e automatizar a manuten\u00e7\u00e3o do WordPress com o Acorn","datePublished":"2026-02-25T10:02:52+00:00","dateModified":"2026-03-02T14:16:48+00:00","mainEntityOfPage":{"@id":"https:\/\/kinsta.com\/pt\/blog\/comandos-wp-cli-personalizados-acorn\/"},"wordCount":1398,"publisher":{"@id":"https:\/\/kinsta.com\/pt\/#organization"},"image":{"@id":"https:\/\/kinsta.com\/pt\/blog\/comandos-wp-cli-personalizados-acorn\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2026\/02\/automating-wordpress-maintenance-with-wp-cli-and-acorn.png","inLanguage":"pt-PT"},{"@type":"WebPage","@id":"https:\/\/kinsta.com\/pt\/blog\/comandos-wp-cli-personalizados-acorn\/","url":"https:\/\/kinsta.com\/pt\/blog\/comandos-wp-cli-personalizados-acorn\/","name":"Como criar comandos WP-CLI personalizados e automatizar a manuten\u00e7\u00e3o do WordPress com o Acorn","isPartOf":{"@id":"https:\/\/kinsta.com\/pt\/#website"},"primaryImageOfPage":{"@id":"https:\/\/kinsta.com\/pt\/blog\/comandos-wp-cli-personalizados-acorn\/#primaryimage"},"image":{"@id":"https:\/\/kinsta.com\/pt\/blog\/comandos-wp-cli-personalizados-acorn\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2026\/02\/automating-wordpress-maintenance-with-wp-cli-and-acorn.png","datePublished":"2026-02-25T10:02:52+00:00","dateModified":"2026-03-02T14:16:48+00:00","description":"Entre WP-CLI, Acorn e WordPress, voc\u00ea pode criar comandos personalizados que ajudam na manuten\u00e7\u00e3o do site. Este artigo mostra como fazer isso.","breadcrumb":{"@id":"https:\/\/kinsta.com\/pt\/blog\/comandos-wp-cli-personalizados-acorn\/#breadcrumb"},"inLanguage":"pt-PT","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kinsta.com\/pt\/blog\/comandos-wp-cli-personalizados-acorn\/"]}]},{"@type":"ImageObject","inLanguage":"pt-PT","@id":"https:\/\/kinsta.com\/pt\/blog\/comandos-wp-cli-personalizados-acorn\/#primaryimage","url":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2026\/02\/automating-wordpress-maintenance-with-wp-cli-and-acorn.png","contentUrl":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2026\/02\/automating-wordpress-maintenance-with-wp-cli-and-acorn.png","width":1470,"height":735},{"@type":"BreadcrumbList","@id":"https:\/\/kinsta.com\/pt\/blog\/comandos-wp-cli-personalizados-acorn\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/kinsta.com\/pt\/"},{"@type":"ListItem","position":2,"name":"Desenvolvimento WordPress","item":"https:\/\/kinsta.com\/pt\/topicos\/desenvolvimento-wordpress\/"},{"@type":"ListItem","position":3,"name":"Como criar comandos WP-CLI personalizados e automatizar a manuten\u00e7\u00e3o do WordPress com o Acorn"}]},{"@type":"WebSite","@id":"https:\/\/kinsta.com\/pt\/#website","url":"https:\/\/kinsta.com\/pt\/","name":"Kinsta\u00ae","description":"Solu\u00e7\u00f5es de hospedagem Premium, r\u00e1pida e segura","publisher":{"@id":"https:\/\/kinsta.com\/pt\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/kinsta.com\/pt\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pt-PT"},{"@type":"Organization","@id":"https:\/\/kinsta.com\/pt\/#organization","name":"Kinsta","url":"https:\/\/kinsta.com\/pt\/","logo":{"@type":"ImageObject","inLanguage":"pt-PT","@id":"https:\/\/kinsta.com\/pt\/#\/schema\/logo\/image\/","url":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/12\/kinsta-logo.jpeg","contentUrl":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/12\/kinsta-logo.jpeg","width":500,"height":500,"caption":"Kinsta"},"image":{"@id":"https:\/\/kinsta.com\/pt\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/kinstapt\/","https:\/\/x.com\/kinsta_pt","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\/pt\/#\/schema\/person\/efa7de30245ca15be5ce1dcacff89c07","name":"Joel Olawanle","image":{"@type":"ImageObject","inLanguage":"pt-PT","@id":"https:\/\/kinsta.com\/pt\/#\/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\/pt\/blog\/author\/joelolawanle\/"}]}},"acf":[],"_links":{"self":[{"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/posts\/74614","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/users\/287"}],"replies":[{"embeddable":true,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/comments?post=74614"}],"version-history":[{"count":8,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/posts\/74614\/revisions"}],"predecessor-version":[{"id":74679,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/posts\/74614\/revisions\/74679"}],"alternate":[{"embeddable":true,"hreflang":"en","title":"English","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/74614\/translations\/en"},{"embeddable":true,"hreflang":"it","title":"Italian","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/74614\/translations\/it"},{"embeddable":true,"hreflang":"pt","title":"Portuguese","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/74614\/translations\/pt"},{"embeddable":true,"hreflang":"fr","title":"French","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/74614\/translations\/fr"},{"embeddable":true,"hreflang":"de","title":"German","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/74614\/translations\/de"},{"embeddable":true,"hreflang":"ja","title":"Japanese","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/74614\/translations\/jp"},{"embeddable":true,"hreflang":"nl","title":"Dutch","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/74614\/translations\/nl"},{"embeddable":true,"hreflang":"es","title":"Spanish","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/74614\/translations\/es"},{"href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/74614\/tree"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/media\/74615"}],"wp:attachment":[{"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/media?parent=74614"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/tags?post=74614"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/topic?post=74614"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}