{"id":75588,"date":"2026-02-25T10:49:39","date_gmt":"2026-02-25T09:49:39","guid":{"rendered":"https:\/\/kinsta.com\/de\/?p=75588&#038;preview=true&#038;preview_id=75588"},"modified":"2026-02-27T10:45:17","modified_gmt":"2026-02-27T09:45:17","slug":"eigene-wp-cli-befehle-acorn","status":"publish","type":"post","link":"https:\/\/kinsta.com\/de\/blog\/eigene-wp-cli-befehle-acorn\/","title":{"rendered":"Wie du eigene WP-CLI-Befehle erstellst und die WordPress-Wartung mit Acorn automatisierst"},"content":{"rendered":"<p>Wahrscheinlich hast du PHP-Skripte, die verschiedene Aufgaben erledigen, z. B. verwaiste Beitrags-Metadaten aufr\u00e4umen oder abgelaufene Transienten l\u00f6schen. Mit der Zeit wird diese Sammlung immer gr\u00f6\u00dfer und befindet sich in einer Themedatei, einem Plugin-Ordner oder einem versteckten Verzeichnis. Acorn hilft dabei, diese Unordnung in den Griff zu bekommen, indem es die Artisan Console von Laravel auf WordPress \u00fcbertr\u00e4gt.<\/p>\n<p>Das bedeutet, dass du eigene WP-CLI-Befehle mit strukturierten Klassendateien erstellen kannst, die deine Wartungslogik zentralisieren. Diese Befehle werden in der Entwicklung, im Staging und in der Produktion einheitlich ausgef\u00fchrt und enthalten Fortschrittsanzeigen, formatierte Tabellenausgaben, eine angemessene Fehlerbehandlung und vieles mehr. Du kannst sie dann \u00fcber SSH ausl\u00f6sen, mit Cron-Jobs planen oder w\u00e4hrend der Bereitstellung ausf\u00fchren.<\/p>\n<div><\/div><kinsta-auto-toc heading=\"Table of Contents\" list-style=\"arrow\" selector=\"h2\" count-number=\"-1\"><\/kinsta-auto-toc>\n<h2>So installierst du Acorn und f\u00fchrst Befehle aus<\/h2>\n<p>Der erste Schritt besteht darin, die ben\u00f6tigten Abh\u00e4ngigkeiten zu installieren. Acorn ben\u00f6tigt <a href=\"https:\/\/kinsta.com\/de\/blog\/php-8-2\/\">PHP 8.2<\/a> oder h\u00f6her, <a href=\"https:\/\/kinsta.com\/de\/blog\/composer-installieren\/\">Composer<\/a> zur Verwaltung der Abh\u00e4ngigkeiten und <a href=\"https:\/\/kinsta.com\/de\/blog\/wp-cli\/\">WP-CLI<\/a> auf deinem Server. Bei Kinsta ist WP-CLI in allen Hosting-Paketen enthalten, sodass du sofort mit der Erstellung von Befehlen beginnen kannst.<\/p>\n<p>Du installierst Acorn \u00fcber den Composer, indem du <code>composer require roots\/acorn<\/code> im Stammverzeichnis deines Projekts verwendest. Dann f\u00fcgst du den Boot-Code entweder in die <code>functions.php<\/code> Datei deines Themes oder in deine Haupt-Plugin-Datei ein:<\/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>Das Zero-Config-Setup speichert den Anwendungscache und die Logs im <a href=\"https:\/\/kinsta.com\/de\/blog\/wordpress-cache\/\">WordPress-Cache-Verzeichnis<\/a> unter <code>[wp-content]\/cache\/acorn\/<\/code>, w\u00e4hrend deine Befehle im Verzeichnis <code>app\/<\/code> des Themes liegen.<\/p>\n<p>Die traditionelle Struktur folgt den Laravel-Konventionen, z. B. mit eigenen Verzeichnissen f\u00fcr <code>app\/<\/code>, <code>config\/<\/code>, <code>storage\/<\/code> und <code>resources\/<\/code> im Stammverzeichnis deines Projekts. Du richtest dies mit einer Zeile ein:<\/p>\n<pre><code class=\"language-bash\">wp acorn acorn:init storage && wp acorn vendor:publish --tag=acorn\n<\/code><\/pre>\n<p>Wenn du <code>wp acorn list<\/code> aufrufst, wird deine Installation \u00fcberpr\u00fcft, indem alle verf\u00fcgbaren Acorn-Befehle angezeigt werden. Ab diesem Zeitpunkt werden alle benutzerdefinierten Befehle, die du erstellst, im Verzeichnis <code>app\/Console\/Commands\/<\/code> gespeichert. Acorn erkennt automatisch alle Befehlsklassen in diesem Verzeichnis und registriert sie bei WP-CLI.<\/p>\n<aside role=\"note\" class=\"wp-block-kinsta-notice is-style-info\">\n            <h3>Info<\/h3>\n        <p>Du verbindest dich \u00fcber SSH mit deinem Server und f\u00fchrst dann <code>wp acorn<\/code> gefolgt von deinem Befehlsnamen aus. F\u00fcr Kinsta-Kunden findest du die <a href=\"https:\/\/kinsta.com\/help\/connect-to-ssh\/\">SSH-Verbindungsdetails<\/a> in deinem MyKinsta-Dashboard.<\/p>\n<\/aside>\n\n<h2>Erstelle deinen ersten Artisan-Befehl<\/h2>\n<p>Der Artisan-Befehl <code>wp acorn make:command CleanupCommand<\/code> erstellt deine Datei mit der von dir ben\u00f6tigten Struktur. Sie enth\u00e4lt drei Schl\u00fcsselelemente, die jeder Artisan-Befehl braucht:<\/p>\n<ul>\n<li>Eine <code>$signature<\/code> Eigenschaft, die deinen Befehlsnamen und deine Optionen definiert.<\/li>\n<li>Die Eigenschaft <code>$description<\/code> f\u00fcr den Hilfetext.<\/li>\n<li>Eine <code>handle()<\/code> Methode, die deine Befehlslogik enth\u00e4lt.<\/li>\n<\/ul>\n<p>In diesem Fall baut sie <code>app\/Console\/Commands\/CleanupCommand.php<\/code> mit einer grundlegenden Befehlsstruktur auf:<\/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>Die Eigenschaft <code>$signature<\/code> verwendet eine bestimmte Syntax:<\/p>\n<ul>\n<li>Ein Basisbefehl braucht nur einen Namen, z. B. <code>cleanup:run<\/code>.<\/li>\n<li>Du f\u00fcgst erforderliche Argumente hinzu, indem du sie in geschweifte Klammern einschlie\u00dft (z. B.<code>cleanup:run {days}<\/code>).<\/li>\n<li>Optionale Argumente erhalten ein Fragezeichen: <code>cleanup:run {days?}<\/code>.<\/li>\n<li>Optionen werden mit Doppelstrichen versehen: <code>cleanup:run {--force} {--limit=100}<\/code>.<\/li>\n<\/ul>\n<p>Als N\u00e4chstes f\u00fcgst du eine Beschreibung f\u00fcr den Befehl und deine grundlegende Logik ein:<\/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>Du kannst dies mit <code>wp acorn cleanup:test --dry-run<\/code> testen. Der Befehl gibt formatierte Nachrichten aus, die das Komponentensystem von Artisan verwenden. Die Methode <code>$this-&gt;components-&gt;info()<\/code> zeigt Erfolgsmeldungen in gr\u00fcn an. Du kannst auch <code>$this-&gt;components-&gt;error()<\/code> f\u00fcr Fehler, <code>$this-&gt;components-&gt;warn()<\/code> f\u00fcr Warnungen und <code>$this-&gt;line()<\/code> f\u00fcr reine Textausgaben verwenden.<\/p>\n<h2>Wie man 3 praktische Wartungsbefehle erstellt<\/h2>\n<p>Hier sind einige Beispiele, die dir helfen, Wartungsaufgaben f\u00fcr die Datenbank zu erledigen, die bei vielen WordPress-Websites anfallen.<\/p>\n<p>Obwohl jeder Befehl eine Fehlerbehandlung enth\u00e4lt und weitgehend den WordPress-Codierungsstandards folgt, um deine Daten zu sch\u00fctzen, solltest du sie dennoch als Grundger\u00fcst f\u00fcr deine eigenen Projekte verwenden, anstatt sie einfach zu kopieren und einzuf\u00fcgen.<\/p>\n<h3>1. Verwaiste Beitrags-Metadaten l\u00f6schen<\/h3>\n<p><a href=\"https:\/\/kinsta.com\/de\/blog\/zuletzt-aktualisiert\/\">Post-Metadaten<\/a> bleiben auch nach dem L\u00f6schen von Beitr\u00e4gen erhalten. Das passiert, wenn Plugins die L\u00f6schfunktionen von WordPress umgehen und Metadateneintr\u00e4ge hinterlassen, die auf Beitr\u00e4ge verweisen, die nicht mehr existieren. Mit der Zeit verlangsamen diese Daten deine Datenbankabfragen.<\/p>\n<p>Sobald du den Befehl mit <code>wp acorn make:command CleanupOrphanedMeta<\/code> erstellt hast, kannst du mit der Struktur und Signatur der Befehlsklasse beginnen:<\/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>Der Befehl verwendet eine <code>LEFT JOIN<\/code> Abfrage, um diese verwaisten Datens\u00e4tze zu finden. Das Muster pr\u00fcft auf <code>NULL<\/code> Werte in der Tabelle posts. Wenn die Verkn\u00fcpfung <code>NULL<\/code> ergibt, geh\u00f6ren die Metadaten zu einem gel\u00f6schten Beitrag:<\/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>Wenn der Befehl verwaiste Beitr\u00e4ge findet, zeigt er dir die Anzahl der Eintr\u00e4ge an und nimmt ein paar Stichproben, wenn du im Trockenlauf bist. Du musst \u00fcberpr\u00fcfen, was gel\u00f6scht wird, bevor du den Befehl best\u00e4tigst:<\/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>Die eigentliche L\u00f6schung erfolgt \u00fcber <code>$wpdb-&gt;prepare()<\/code>, um <a href=\"https:\/\/kinsta.com\/de\/blog\/sql-injection\/\">SQL-Injection-Angriffe<\/a> zu vermeiden. Der Befehl verarbeitet jeweils 1.000 Datens\u00e4tze auf einmal, um Speicherprobleme auf Websites mit Millionen von Metadateneintr\u00e4gen zu vermeiden:<\/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>Um den Befehl auszuf\u00fchren, verwende <code>wp acorn maintenance:cleanup-orphaned-meta --dry-run<\/code>.<\/p>\n<h3>2. Abgelaufene Transienten l\u00f6schen<\/h3>\n<p>WordPress speichert <a href=\"https:\/\/developer.wordpress.org\/apis\/transients\/\" target=\"_blank\" rel=\"noopener noreferrer\">Transienten<\/a> in <code>wp_options<\/code> mit Verfallsdaten. Ein t\u00e4glicher <a href=\"https:\/\/kinsta.com\/de\/blog\/wordpress-cron-job\/\">Cron-Job<\/a> bereinigt diese Daten, aber manchmal musst du sie w\u00e4hrend der Wartungsfenster oder wenn Transients zu einem Problem werden, manuell l\u00f6schen.<\/p>\n<p>Nachdem du den Befehl mit <code>wp acorn make:command CleanupTransients<\/code> erstellt hast, kannst du die Befehlsstruktur einrichten:<\/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>Diese L\u00f6schabfrage verwendet die Mehrtabellensyntax <code>DELETE<\/code>, um sowohl den Transienten als auch seine Timeout-Option auf einmal zu entfernen. Die Abfrage findet Timeout-Datens\u00e4tze, bei denen der Verfallszeitstempel abgelaufen ist:<\/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>\u00dcberpr\u00fcfe auch auf Fehler und verfolge die Anzahl der L\u00f6schungen:<\/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>Bei <a href=\"https:\/\/kinsta.com\/de\/blog\/wordpress-multiseiten\/\">Multisite-Installationen<\/a> f\u00fchrt der Befehl eine zweite Abfrage f\u00fcr Site Transients durch. Diese verwenden unterschiedliche Tabellenpr\u00e4fixe, folgen aber demselben L\u00f6schmuster:<\/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>Um den Befehl auszuf\u00fchren, rufe <code>wp acorn maintenance:cleanup-transients<\/code> auf.<\/p>\n<h3>3. \u00dcberpr\u00fcfen von automatisch geladenen Optionen<\/h3>\n<p><a href=\"https:\/\/kinsta.com\/de\/blog\/wp-options-automatisch-geladene-daten\/\">Autoload-Optionen<\/a> werden bei jeder Anfrage geladen, die deine WordPress-Website bearbeitet. Wenn diese Daten eine Gr\u00f6\u00dfe von 1 MB \u00fcberschreiten, kann es zu Verlangsamungen und Speicherverbrauchsspitzen kommen. Mit diesem Befehl findest du die gr\u00f6\u00dften automatisch geladenen Optionen, damit du herausfinden kannst, welche Plugins die Ursache f\u00fcr die \u00dcberlastung sind.<\/p>\n<p>Zuerst erstellst du den Audit-Befehl mit <code>wp acorn make:command AuditAutoload<\/code>. Dann definierst du die Befehlssignatur mit einem konfigurierbaren Schwellenwert:<\/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>Berechne von hier aus die Gesamtgr\u00f6\u00dfe aller automatisch geladenen Optionen:<\/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>Der Befehl f\u00fchrt eine Abfrage nach Optionen durch, die \u00fcber deinem Schwellenwert liegen, sortiert sie nach Gr\u00f6\u00dfe und beschr\u00e4nkt die Ergebnisse auf die gr\u00f6\u00dften 20:<\/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>Die Artisan-Methode <code>$this-&gt;table()<\/code> formatiert diese Ergebnisse als ASCII-Tabelle: Das Lesen der tabellarischen Daten in deinem Terminal schl\u00e4gt das Parsen der rohen Abfrageausgabe:<\/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>Der Befehl gibt eine Warnung aus, wenn der gesamte Autoload 3 MB \u00fcberschreitet, was auf ein Leistungsproblem hinweist, das du beheben musst:<\/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>Um das Audit auszuf\u00fchren, verwende <code>wp acorn maintenance:audit-autoload --threshold=500000<\/code>.<\/p>\n<h2>Wie man innerhalb von Befehlen auf WordPress-Daten zugreift<\/h2>\n<p>WordPress-Funktionen funktionieren innerhalb deiner Befehlsmethoden, weil Acorn innerhalb des Lebenszyklus von WordPress bootet. Das bedeutet, dass du einige Funktionen wie <code>get_posts()<\/code> oder <code>get_option()<\/code> ohne besondere Einrichtung aufrufen kannst:<\/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>F\u00fcr direkte Datenbankabfragen deklarierst du die globale <code>$wpdb<\/code> am Anfang deiner Methode:<\/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> dies ist ideal, wenn deine Abfragen Variablen oder Benutzereingaben enthalten, da es hilft, SQL-Injection-Angriffe zu verhindern:<\/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>Wenn du nach jeder Datenbankoperation auf <code>false<\/code> testest, solltest du Fehler erkennen k\u00f6nnen:<\/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><a href=\"https:\/\/kinsta.com\/de\/blog\/wordpress-benutzerdefinierte-beitragstypen\/\">Benutzerdefinierte Beitragstypen<\/a> und Taxonomien funktionieren \u00fcber die Standardfunktionen von 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>Benutzerdefinierte WP-CLI-Befehle sind mit Acorn und Artisan Console ganz einfach<\/h2>\n<p>Mit <a href=\"https:\/\/roots.io\/acorn\/\" target=\"_blank\" rel=\"noopener noreferrer\">Acorn<\/a> kannst du auf die strukturierten Befehlsklassen von Laravel, formatierte Ausgabekomponenten, eine angemessene Fehlerbehandlung und vieles mehr zugreifen, w\u00e4hrend du gleichzeitig vollen Zugriff auf die Funktionen und Daten von WordPress hast.<\/p>\n<p>Du kannst Befehle \u00fcber SSH-Zugang und Cron-Planung in Kinsta integrieren. Du kannst auch Befehle zu deinen Bereitstellungs-Skripten hinzuf\u00fcgen, um die Wartung zu automatisieren, zum Beispiel mit <a href=\"https:\/\/kinsta.com\/blog\/github-actions\/\">GitHub Actions<\/a> Workflows.<\/p>\n<p>Wenn du deine WordPress-Wartungsaufgaben mit benutzerdefinierten WP-CLI-Befehlen zentralisieren m\u00f6chtest, sind SSH-Zugang und WP-CLI in allen <a href=\"https:\/\/kinsta.com\/de\/wordpress-hosting\/\">Managed WordPress Hosting-Tarifen von Kinsta<\/a> enthalten.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Wahrscheinlich hast du PHP-Skripte, die verschiedene Aufgaben erledigen, z. B. verwaiste Beitrags-Metadaten aufr\u00e4umen oder abgelaufene Transienten l\u00f6schen. Mit der Zeit wird diese Sammlung immer gr\u00f6\u00dfer und &#8230;<\/p>\n","protected":false},"author":287,"featured_media":75589,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kinsta_gated_content":false,"_kinsta_gated_content_redirect":"","footnotes":""},"tags":[],"topic":[999],"class_list":["post-75588","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","topic-wordpress-entwicklung"],"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>Erstelle WP-CLI-Befehle und automatisiere die Wartung mit Acorn<\/title>\n<meta name=\"description\" content=\"Mit WP-CLI, Acorn und WordPress kannst du eigene Befehle erstellen, die dir bei der Pflege deiner Website helfen. In diesem Beitrag erf\u00e4hrst du, wie das geht.\" \/>\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\/de\/blog\/eigene-wp-cli-befehle-acorn\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Wie du eigene WP-CLI-Befehle erstellst und die WordPress-Wartung mit Acorn automatisierst\" \/>\n<meta property=\"og:description\" content=\"Mit WP-CLI, Acorn und WordPress kannst du eigene Befehle erstellen, die dir bei der Pflege deiner Website helfen. In diesem Beitrag erf\u00e4hrst du, wie das geht.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kinsta.com\/de\/blog\/eigene-wp-cli-befehle-acorn\/\" \/>\n<meta property=\"og:site_name\" content=\"Kinsta\u00ae\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/Kinsta-Deutschland-207459890108303\/\" \/>\n<meta property=\"article:published_time\" content=\"2026-02-25T09:49:39+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-02-27T09:45:17+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/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=\"Mit WP-CLI, Acorn und WordPress kannst du eigene Befehle erstellen, die dir bei der Pflege deiner Website helfen. In diesem Beitrag erf\u00e4hrst du, wie das geht.\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/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_DE\" \/>\n<meta name=\"twitter:label1\" content=\"Verfasst von\" \/>\n\t<meta name=\"twitter:data1\" content=\"Joel Olawanle\" \/>\n\t<meta name=\"twitter:label2\" content=\"Gesch\u00e4tzte Lesezeit\" \/>\n\t<meta name=\"twitter:data2\" content=\"11\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/kinsta.com\/de\/blog\/eigene-wp-cli-befehle-acorn\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/de\/blog\/eigene-wp-cli-befehle-acorn\/\"},\"author\":{\"name\":\"Joel Olawanle\",\"@id\":\"https:\/\/kinsta.com\/de\/#\/schema\/person\/efa7de30245ca15be5ce1dcacff89c07\"},\"headline\":\"Wie du eigene WP-CLI-Befehle erstellst und die WordPress-Wartung mit Acorn automatisierst\",\"datePublished\":\"2026-02-25T09:49:39+00:00\",\"dateModified\":\"2026-02-27T09:45:17+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/kinsta.com\/de\/blog\/eigene-wp-cli-befehle-acorn\/\"},\"wordCount\":1187,\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/de\/#organization\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/de\/blog\/eigene-wp-cli-befehle-acorn\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2026\/02\/automating-wordpress-maintenance-with-wp-cli-and-acorn.png\",\"inLanguage\":\"de\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/kinsta.com\/de\/blog\/eigene-wp-cli-befehle-acorn\/\",\"url\":\"https:\/\/kinsta.com\/de\/blog\/eigene-wp-cli-befehle-acorn\/\",\"name\":\"Erstelle WP-CLI-Befehle und automatisiere die Wartung mit Acorn\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/de\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/kinsta.com\/de\/blog\/eigene-wp-cli-befehle-acorn\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/de\/blog\/eigene-wp-cli-befehle-acorn\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2026\/02\/automating-wordpress-maintenance-with-wp-cli-and-acorn.png\",\"datePublished\":\"2026-02-25T09:49:39+00:00\",\"dateModified\":\"2026-02-27T09:45:17+00:00\",\"description\":\"Mit WP-CLI, Acorn und WordPress kannst du eigene Befehle erstellen, die dir bei der Pflege deiner Website helfen. In diesem Beitrag erf\u00e4hrst du, wie das geht.\",\"breadcrumb\":{\"@id\":\"https:\/\/kinsta.com\/de\/blog\/eigene-wp-cli-befehle-acorn\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/kinsta.com\/de\/blog\/eigene-wp-cli-befehle-acorn\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\/\/kinsta.com\/de\/blog\/eigene-wp-cli-befehle-acorn\/#primaryimage\",\"url\":\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2026\/02\/automating-wordpress-maintenance-with-wp-cli-and-acorn.png\",\"contentUrl\":\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2026\/02\/automating-wordpress-maintenance-with-wp-cli-and-acorn.png\",\"width\":1470,\"height\":735},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/kinsta.com\/de\/blog\/eigene-wp-cli-befehle-acorn\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/kinsta.com\/de\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"WordPress Entwicklung\",\"item\":\"https:\/\/kinsta.com\/de\/thema\/wordpress-entwicklung\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Wie du eigene WP-CLI-Befehle erstellst und die WordPress-Wartung mit Acorn automatisierst\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/kinsta.com\/de\/#website\",\"url\":\"https:\/\/kinsta.com\/de\/\",\"name\":\"Kinsta\u00ae\",\"description\":\"Schnelle, sichere und hochwertige Hosting-L\u00f6sungen\",\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/de\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/kinsta.com\/de\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"de\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/kinsta.com\/de\/#organization\",\"name\":\"Kinsta\",\"url\":\"https:\/\/kinsta.com\/de\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\/\/kinsta.com\/de\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/12\/kinsta-logo.jpeg\",\"contentUrl\":\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/12\/kinsta-logo.jpeg\",\"width\":500,\"height\":500,\"caption\":\"Kinsta\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/de\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/Kinsta-Deutschland-207459890108303\/\",\"https:\/\/x.com\/Kinsta_DE\",\"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\/de\/#\/schema\/person\/efa7de30245ca15be5ce1dcacff89c07\",\"name\":\"Joel Olawanle\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\/\/kinsta.com\/de\/#\/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\/de\/blog\/author\/joelolawanle\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Erstelle WP-CLI-Befehle und automatisiere die Wartung mit Acorn","description":"Mit WP-CLI, Acorn und WordPress kannst du eigene Befehle erstellen, die dir bei der Pflege deiner Website helfen. In diesem Beitrag erf\u00e4hrst du, wie das geht.","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\/de\/blog\/eigene-wp-cli-befehle-acorn\/","og_locale":"de_DE","og_type":"article","og_title":"Wie du eigene WP-CLI-Befehle erstellst und die WordPress-Wartung mit Acorn automatisierst","og_description":"Mit WP-CLI, Acorn und WordPress kannst du eigene Befehle erstellen, die dir bei der Pflege deiner Website helfen. In diesem Beitrag erf\u00e4hrst du, wie das geht.","og_url":"https:\/\/kinsta.com\/de\/blog\/eigene-wp-cli-befehle-acorn\/","og_site_name":"Kinsta\u00ae","article_publisher":"https:\/\/www.facebook.com\/Kinsta-Deutschland-207459890108303\/","article_published_time":"2026-02-25T09:49:39+00:00","article_modified_time":"2026-02-27T09:45:17+00:00","og_image":[{"width":1470,"height":735,"url":"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2026\/02\/automating-wordpress-maintenance-with-wp-cli-and-acorn.png","type":"image\/png"}],"author":"Joel Olawanle","twitter_card":"summary_large_image","twitter_description":"Mit WP-CLI, Acorn und WordPress kannst du eigene Befehle erstellen, die dir bei der Pflege deiner Website helfen. In diesem Beitrag erf\u00e4hrst du, wie das geht.","twitter_image":"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2026\/02\/automating-wordpress-maintenance-with-wp-cli-and-acorn.png","twitter_creator":"@olawanle_joel","twitter_site":"@Kinsta_DE","twitter_misc":{"Verfasst von":"Joel Olawanle","Gesch\u00e4tzte Lesezeit":"11\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kinsta.com\/de\/blog\/eigene-wp-cli-befehle-acorn\/#article","isPartOf":{"@id":"https:\/\/kinsta.com\/de\/blog\/eigene-wp-cli-befehle-acorn\/"},"author":{"name":"Joel Olawanle","@id":"https:\/\/kinsta.com\/de\/#\/schema\/person\/efa7de30245ca15be5ce1dcacff89c07"},"headline":"Wie du eigene WP-CLI-Befehle erstellst und die WordPress-Wartung mit Acorn automatisierst","datePublished":"2026-02-25T09:49:39+00:00","dateModified":"2026-02-27T09:45:17+00:00","mainEntityOfPage":{"@id":"https:\/\/kinsta.com\/de\/blog\/eigene-wp-cli-befehle-acorn\/"},"wordCount":1187,"publisher":{"@id":"https:\/\/kinsta.com\/de\/#organization"},"image":{"@id":"https:\/\/kinsta.com\/de\/blog\/eigene-wp-cli-befehle-acorn\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2026\/02\/automating-wordpress-maintenance-with-wp-cli-and-acorn.png","inLanguage":"de"},{"@type":"WebPage","@id":"https:\/\/kinsta.com\/de\/blog\/eigene-wp-cli-befehle-acorn\/","url":"https:\/\/kinsta.com\/de\/blog\/eigene-wp-cli-befehle-acorn\/","name":"Erstelle WP-CLI-Befehle und automatisiere die Wartung mit Acorn","isPartOf":{"@id":"https:\/\/kinsta.com\/de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/kinsta.com\/de\/blog\/eigene-wp-cli-befehle-acorn\/#primaryimage"},"image":{"@id":"https:\/\/kinsta.com\/de\/blog\/eigene-wp-cli-befehle-acorn\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2026\/02\/automating-wordpress-maintenance-with-wp-cli-and-acorn.png","datePublished":"2026-02-25T09:49:39+00:00","dateModified":"2026-02-27T09:45:17+00:00","description":"Mit WP-CLI, Acorn und WordPress kannst du eigene Befehle erstellen, die dir bei der Pflege deiner Website helfen. In diesem Beitrag erf\u00e4hrst du, wie das geht.","breadcrumb":{"@id":"https:\/\/kinsta.com\/de\/blog\/eigene-wp-cli-befehle-acorn\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kinsta.com\/de\/blog\/eigene-wp-cli-befehle-acorn\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/kinsta.com\/de\/blog\/eigene-wp-cli-befehle-acorn\/#primaryimage","url":"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2026\/02\/automating-wordpress-maintenance-with-wp-cli-and-acorn.png","contentUrl":"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2026\/02\/automating-wordpress-maintenance-with-wp-cli-and-acorn.png","width":1470,"height":735},{"@type":"BreadcrumbList","@id":"https:\/\/kinsta.com\/de\/blog\/eigene-wp-cli-befehle-acorn\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/kinsta.com\/de\/"},{"@type":"ListItem","position":2,"name":"WordPress Entwicklung","item":"https:\/\/kinsta.com\/de\/thema\/wordpress-entwicklung\/"},{"@type":"ListItem","position":3,"name":"Wie du eigene WP-CLI-Befehle erstellst und die WordPress-Wartung mit Acorn automatisierst"}]},{"@type":"WebSite","@id":"https:\/\/kinsta.com\/de\/#website","url":"https:\/\/kinsta.com\/de\/","name":"Kinsta\u00ae","description":"Schnelle, sichere und hochwertige Hosting-L\u00f6sungen","publisher":{"@id":"https:\/\/kinsta.com\/de\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/kinsta.com\/de\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"de"},{"@type":"Organization","@id":"https:\/\/kinsta.com\/de\/#organization","name":"Kinsta","url":"https:\/\/kinsta.com\/de\/","logo":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/kinsta.com\/de\/#\/schema\/logo\/image\/","url":"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/12\/kinsta-logo.jpeg","contentUrl":"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/12\/kinsta-logo.jpeg","width":500,"height":500,"caption":"Kinsta"},"image":{"@id":"https:\/\/kinsta.com\/de\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/Kinsta-Deutschland-207459890108303\/","https:\/\/x.com\/Kinsta_DE","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\/de\/#\/schema\/person\/efa7de30245ca15be5ce1dcacff89c07","name":"Joel Olawanle","image":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/kinsta.com\/de\/#\/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\/de\/blog\/author\/joelolawanle\/"}]}},"acf":[],"_links":{"self":[{"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/posts\/75588","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/users\/287"}],"replies":[{"embeddable":true,"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/comments?post=75588"}],"version-history":[{"count":5,"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/posts\/75588\/revisions"}],"predecessor-version":[{"id":75618,"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/posts\/75588\/revisions\/75618"}],"alternate":[{"embeddable":true,"hreflang":"en","title":"English","href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/75588\/translations\/en"},{"embeddable":true,"hreflang":"it","title":"Italian","href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/75588\/translations\/it"},{"embeddable":true,"hreflang":"pt","title":"Portuguese","href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/75588\/translations\/pt"},{"embeddable":true,"hreflang":"fr","title":"French","href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/75588\/translations\/fr"},{"embeddable":true,"hreflang":"de","title":"German","href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/75588\/translations\/de"},{"embeddable":true,"hreflang":"ja","title":"Japanese","href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/75588\/translations\/jp"},{"embeddable":true,"hreflang":"nl","title":"Dutch","href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/75588\/translations\/nl"},{"embeddable":true,"hreflang":"es","title":"Spanish","href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/75588\/translations\/es"},{"href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/75588\/tree"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/media\/75589"}],"wp:attachment":[{"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/media?parent=75588"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/tags?post=75588"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/topic?post=75588"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}