{"id":10275,"date":"2026-08-15T01:07:30","date_gmt":"2026-08-14T23:07:30","guid":{"rendered":"https:\/\/www.lukaswojcik.com\/blog\/werkzeuge\/wp-cli-database-cleanup-builder\/"},"modified":"2026-08-15T01:07:30","modified_gmt":"2026-08-14T23:07:30","slug":"wp-cli-database-cleanup-builder","status":"publish","type":"page","link":"https:\/\/www.lukaswojcik.com\/blog\/de\/werkzeuge\/wp-cli-database-cleanup-builder\/","title":{"rendered":"WP-CLI-Befehle f\u00fcr die Datenbankpflege bauen"},"content":{"rendered":"<div class=\"gtm-analyser-container\" style=\"background: var(--bg-panel, #1e1e24); padding: 25px; border-radius: 8px; border: 1px solid var(--border, #2a2a35);\">\n<p style=\"color: var(--text-secondary, #a0a0b0); margin-bottom: 20px;\">WP-CLI kennt f\u00fcr diese Befehle kein Probelaufen: was gel\u00f6scht ist, ist weg. Dieser Baukasten stellt deshalb jedem L\u00f6schen ein Z\u00e4hlen voran, beginnt mit dem Datenbankexport und sagt, was der jeweilige Schritt wirklich entfernt.<\/p>\n<div style=\"display: flex; gap: 12px; flex-wrap: wrap;\">\n<div style=\"flex: 2; min-width: 220px;\">\n            <label for=\"wc-pfad\" style=\"color: var(--text-secondary, #a0a0b0); display: block; font-size: 0.85rem; margin-bottom: 5px;\">Pfad zur WordPress-Installation<\/label><br \/>\n            <input type=\"text\" id=\"wc-pfad\" class=\"form-control\" style=\"width: 100%; padding: 10px; background: var(--bg-body, #14141a); border: 1px solid var(--border, #2a2a35); color: var(--text-primary, #e8e8ee); border-radius: 6px; font-family: monospace; box-sizing: border-box;\" value=\"\/var\/www\/html\/beispiel\">\n        <\/div>\n<div style=\"flex: 1; min-width: 160px;\">\n            <label for=\"wc-praefix\" style=\"color: var(--text-secondary, #a0a0b0); display: block; font-size: 0.85rem; margin-bottom: 5px;\">Tabellenpr\u00e4fix<\/label><br \/>\n            <input type=\"text\" id=\"wc-praefix\" class=\"form-control\" style=\"width: 100%; padding: 10px; background: var(--bg-body, #14141a); border: 1px solid var(--border, #2a2a35); color: var(--text-primary, #e8e8ee); border-radius: 6px; font-family: monospace; box-sizing: border-box;\" value=\"wp_\">\n        <\/div>\n<div style=\"flex: 1; min-width: 160px;\">\n            <label for=\"wc-revisionen\" style=\"color: var(--text-secondary, #a0a0b0); display: block; font-size: 0.85rem; margin-bottom: 5px;\">K\u00fcnftig aufzubewahrende Revisionen<\/label><br \/>\n            <input type=\"text\" id=\"wc-revisionen\" class=\"form-control\" style=\"width: 100%; padding: 10px; background: var(--bg-body, #14141a); border: 1px solid var(--border, #2a2a35); color: var(--text-primary, #e8e8ee); border-radius: 6px; font-family: monospace; box-sizing: border-box;\" value=\"3\">\n        <\/div>\n<\/p><\/div>\n<div style=\"color: var(--text-secondary, #a0a0b0); font-size: 0.85rem; margin: 18px 0 8px;\">Was aufger\u00e4umt werden soll<\/div>\n<div id=\"wc-aufgaben\" style=\"display: flex; flex-wrap: wrap; gap: 6px 24px;\"><\/div>\n<div style=\"display: flex; gap: 10px; flex-wrap: wrap; margin: 18px 0 0;\">\n        <button id=\"wc-btn\" class=\"button\" style=\"background: var(--accent, #7ee787); color: #0b1114; border: none; padding: 12px 24px; border-radius: 6px; font-weight: 700; cursor: pointer;\">Befehle bauen<\/button>\n    <\/div>\n<div id=\"wc-ergebnis\" style=\"margin-top: 22px;\"><\/div>\n<\/div>\n<p><script>\n(function () {\n    'use strict';<\/p>\n<p>    const T = {\"einleitung\":\"WP-CLI kennt f\u00fcr diese Befehle kein Probelaufen: was gel\u00f6scht ist, ist weg. Dieser Baukasten stellt deshalb jedem L\u00f6schen ein Z\u00e4hlen voran, beginnt mit dem Datenbankexport und sagt, was der jeweilige Schritt wirklich entfernt.\",\"label_pfad\":\"Pfad zur WordPress-Installation\",\"label_praefix\":\"Tabellenpr\u00e4fix\",\"label_revisionen\":\"K\u00fcnftig aufzubewahrende Revisionen\",\"label_aufgaben\":\"Was aufger\u00e4umt werden soll\",\"knopf\":\"Befehle bauen\",\"fehler_pfad\":\"Der Pfad zur Installation fehlt.\",\"fehler_pfad_absolut\":\"Der Pfad muss absolut sein.\",\"fehler_pfad_zeichen\":\"Der Pfad enth\u00e4lt Zeichen, die die Kommandozeile auswerten w\u00fcrde.\",\"fehler_praefix\":\"Das Tabellenpr\u00e4fix darf nur Buchstaben, Ziffern und Unterstriche enthalten.\",\"fehler_revisionen\":\"Die Zahl der Revisionen muss eine ganze Zahl sein.\",\"fehler_keine_aufgabe\":\"Es ist keine einzige Aufgabe ausgew\u00e4hlt.\",\"a_revisionen\":\"Beitragsrevisionen l\u00f6schen\",\"a_entwuerfe\":\"Automatische Entw\u00fcrfe l\u00f6schen\",\"a_papierkorb\":\"Papierkorb leeren\",\"a_spam\":\"Spam-Kommentare l\u00f6schen\",\"a_kommentare\":\"Kommentare im Papierkorb l\u00f6schen\",\"a_transienten\":\"Abgelaufene Transienten l\u00f6schen\",\"a_transienten_alle\":\"Alle Transienten l\u00f6schen\",\"a_postmeta\":\"Verwaiste Postmeta l\u00f6schen\",\"a_termmeta\":\"Verwaiste Termmeta l\u00f6schen\",\"a_optimieren\":\"Tabellen optimieren\",\"h_sicherung\":\"Zuerst die Sicherung\",\"h_schritte\":\"Schritte der Reihe nach\",\"h_konstante\":\"Damit Revisionen nicht nachwachsen\",\"h_befunde\":\"Was dabei verschwindet\",\"sicherung_erklaerung\":\"Keiner der Schritte darunter l\u00e4sst sich r\u00fcckg\u00e4ngig machen. Der Export dauert Sekunden und ist der einzige Weg zur\u00fcck.\",\"zuerst_zaehlen\":\"erst z\u00e4hlen\",\"dann_loeschen\":\"dann l\u00f6schen\",\"konstante_erklaerung\":\"Die Zeile geh\u00f6rt in die wp-config.php oberhalb des Hinweises zum Bearbeiten. Sie begrenzt neue Revisionen, die vorhandenen entfernt der Schritt dar\u00fcber.\",\"b_revisionen_alle\":\"Der Befehl l\u00f6scht alle Revisionen, nicht die letzten paar. Damit ist die Bearbeitungsgeschichte jedes Beitrags weg.\",\"b_revisionen_grenze\":\"Ab dann beh\u00e4lt WordPress %s Revisionen je Beitrag, die Tabelle w\u00e4chst also nicht wieder nach.\",\"b_transienten_alle\":\"Alle Transienten zu l\u00f6schen trifft auch die noch g\u00fcltigen. Alles, was von Zwischenspeicherung lebt, baut sie neu auf, das ist f\u00fcr einige Minuten sp\u00fcrbare Last.\",\"b_papierkorb\":\"Der Papierkorb wird endg\u00fcltig geleert. Was eine Kollegin f\u00fcr sp\u00e4ter dort abgelegt hat, ist weg.\",\"b_sql\":\"Dieser Schritt schreibt SQL unmittelbar an WordPress vorbei. Das Tabellenpr\u00e4fix vorher pr\u00fcfen, sonst trifft die Anweisung auf einer gemeinsamen Datenbank die falsche Installation.\",\"b_optimieren\":\"Das Optimieren schreibt die Tabellen neu und sperrt sie kurz. Auf einer belebten Seite geh\u00f6rt das in eine ruhige Stunde.\",\"b_leer\":\"Findet sich nichts, meldet der L\u00f6schbefehl einen Fehler \u00fcber ein fehlendes Argument. Das ist das erwartete Ergebnis und kein Scheitern.\",\"b_cron\":\"Als Cronjob geh\u00f6rt das Ganze in ein Skript, das beim ersten Fehler abbricht, sonst folgen einem gescheiterten Schritt alle \u00fcbrigen.\"};<\/p>\n<p>    \/\/ --- reine Rechenlogik ---<\/p>\n<p>    \/\/ Jede Aufgabe kommt mit einem Befehl zum Zaehlen und einem zum Loeschen.\n    \/\/ WP-CLI kennt fuer diese Befehle kein Probelaufen, deshalb steht das\n    \/\/ Zaehlen als eigener Schritt davor.\n    const AUFGABEN = [\n        { kennung: 'revisionen', zaehlen: 'wp post list --post_type=revision --format=count',\n          befehl: 'wp post delete $(wp post list --post_type=revision --format=ids) --force' },\n        { kennung: 'entwuerfe', zaehlen: 'wp post list --post_status=auto-draft --format=count',\n          befehl: 'wp post delete $(wp post list --post_status=auto-draft --format=ids) --force' },\n        { kennung: 'papierkorb', zaehlen: 'wp post list --post_status=trash --format=count',\n          befehl: 'wp post delete $(wp post list --post_status=trash --format=ids) --force' },\n        { kennung: 'spam', zaehlen: 'wp comment list --status=spam --format=count',\n          befehl: 'wp comment delete $(wp comment list --status=spam --format=ids) --force' },\n        { kennung: 'kommentare', zaehlen: 'wp comment list --status=trash --format=count',\n          befehl: 'wp comment delete $(wp comment list --status=trash --format=ids) --force' },\n        { kennung: 'transienten', zaehlen: null, befehl: 'wp transient delete --expired' },\n        { kennung: 'transienten_alle', zaehlen: null, befehl: 'wp transient delete --all' },\n        { kennung: 'postmeta', zaehlen: 'SELECT COUNT(*) FROM {p}postmeta pm LEFT JOIN {p}posts p ON p.ID = pm.post_id WHERE p.ID IS NULL',\n          befehl: 'DELETE pm FROM {p}postmeta pm LEFT JOIN {p}posts p ON p.ID = pm.post_id WHERE p.ID IS NULL', sql: true },\n        { kennung: 'termmeta', zaehlen: 'SELECT COUNT(*) FROM {p}termmeta tm LEFT JOIN {p}terms t ON t.term_id = tm.term_id WHERE t.term_id IS NULL',\n          befehl: 'DELETE tm FROM {p}termmeta tm LEFT JOIN {p}terms t ON t.term_id = tm.term_id WHERE t.term_id IS NULL', sql: true },\n        { kennung: 'optimieren', zaehlen: null, befehl: 'wp db optimize' }\n    ];<\/p>\n<p>    function bauen(e) {\n        const ergebnis = { ok: false, fehler: '', schritte: [], befunde: [], sicherung: '' };\n        const eingabe = e || {};<\/p>\n<p>        const pfad = String(eingabe.pfad === undefined ? '' : eingabe.pfad).trim();\n        if (pfad === '') { ergebnis.fehler = T.fehler_pfad; return ergebnis; }\n        if (pfad.charAt(0) !== '\/') { ergebnis.fehler = T.fehler_pfad_absolut; return ergebnis; }\n        if (\/[;&|`$]\/.test(pfad)) { ergebnis.fehler = T.fehler_pfad_zeichen; return ergebnis; }<\/p>\n<p>        const praefix = String(eingabe.praefix === undefined ? 'wp_' : eingabe.praefix).trim() || 'wp_';\n        if (!\/^[A-Za-z0-9_]+$\/.test(praefix)) { ergebnis.fehler = T.fehler_praefix; return ergebnis; }<\/p>\n<p>        const revisionen = String(eingabe.revisionen === undefined ? '' : eingabe.revisionen).trim();\n        if (revisionen !== '' && !\/^[0-9]+$\/.test(revisionen)) { ergebnis.fehler = T.fehler_revisionen; return ergebnis; }<\/p>\n<p>        const gewaehlt = eingabe.aufgaben || {};\n        const aktive = AUFGABEN.filter(function (a) { return gewaehlt[a.kennung]; });\n        if (!aktive.length) { ergebnis.fehler = T.fehler_keine_aufgabe; return ergebnis; }<\/p>\n<p>        const pfadTeil = ' --path=' + pfad;\n        ergebnis.sicherung = 'wp db export \/home\/pi\/sicherung-vor-aufraeumen.sql' + pfadTeil;<\/p>\n<p>        aktive.forEach(function (a) {\n            const schritt = { kennung: a.kennung, name: T['a_' + a.kennung], zaehlen: '', befehl: '' };\n            if (a.sql) {\n                const zaehlSql = a.zaehlen.replace(\/\\{p\\}\/g, praefix);\n                const loeschSql = a.befehl.replace(\/\\{p\\}\/g, praefix);\n                schritt.zaehlen = 'wp db query \"' + zaehlSql + '\"' + pfadTeil;\n                schritt.befehl = 'wp db query \"' + loeschSql + '\"' + pfadTeil;\n            } else {\n                schritt.zaehlen = a.zaehlen ? a.zaehlen + pfadTeil : '';\n                schritt.befehl = a.befehl + pfadTeil;\n            }\n            ergebnis.schritte.push(schritt);\n        });<\/p>\n<p>        \/\/ --- Befunde ---\n        if (gewaehlt.revisionen) {\n            ergebnis.befunde.push({ schwer: true, text: T.b_revisionen_alle });\n            if (revisionen !== '' && parseInt(revisionen, 10) > 0) {\n                ergebnis.befunde.push({ schwer: false, text: T.b_revisionen_grenze.replace('%s', revisionen) });\n                ergebnis.konstante = \"define( 'WP_POST_REVISIONS', \" + parseInt(revisionen, 10) + \" );\";\n            }\n        }\n        if (gewaehlt.transienten_alle) {\n            ergebnis.befunde.push({ schwer: true, text: T.b_transienten_alle });\n        }\n        if (gewaehlt.papierkorb) {\n            ergebnis.befunde.push({ schwer: true, text: T.b_papierkorb });\n        }\n        if (gewaehlt.postmeta || gewaehlt.termmeta) {\n            ergebnis.befunde.push({ schwer: true, text: T.b_sql });\n        }\n        if (gewaehlt.optimieren) {\n            ergebnis.befunde.push({ schwer: false, text: T.b_optimieren });\n        }\n        ergebnis.befunde.push({ schwer: false, text: T.b_leer });\n        ergebnis.befunde.push({ schwer: false, text: T.b_cron });<\/p>\n<p>        ergebnis.ok = true;\n        return ergebnis;\n    }<\/p>\n<p>    if (typeof window !== 'undefined') {\n        window.LW_TEST = window.LW_TEST || {};\n        window.LW_TEST.WC = { bauen: bauen, AUFGABEN: AUFGABEN };\n    }<\/p>\n<p>    \/\/ --- Anbindung an das Dokument ---<\/p>\n<p>    const btn = document.getElementById('wc-btn');\n    const out = document.getElementById('wc-ergebnis');\n    const aufgabenFeld = document.getElementById('wc-aufgaben');\n    if (!btn || !out || !aufgabenFeld) { return; }<\/p>\n<p>    const KASTEN = 'background: var(--bg-body, #14141a); border: 1px solid var(--border, #2a2a35); border-radius: 6px; padding: 14px; margin-bottom: 18px;';\n    const UEBERSCHRIFT = 'color: var(--text-primary, #e8e8ee); font-weight: 700; margin-bottom: 8px;';\n    const VOREINSTELLUNG = ['revisionen', 'entwuerfe', 'spam', 'transienten', 'postmeta'];<\/p>\n<p>    function el(tag, css, inhalt) {\n        const knoten = document.createElement(tag);\n        if (css) { knoten.setAttribute('style', css); }\n        if (inhalt !== undefined && inhalt !== null) { knoten.textContent = inhalt; }\n        return knoten;\n    }<\/p>\n<p>    function wert(id) {\n        const knoten = document.getElementById(id);\n        return knoten ? knoten.value : '';\n    }<\/p>\n<p>    AUFGABEN.forEach(function (a) {\n        const zeile = el('label', 'display: flex; gap: 8px; align-items: center; cursor: pointer; min-width: 220px;');\n        const kasten = document.createElement('input');\n        kasten.type = 'checkbox';\n        \/\/ Eigenes Vorzeichen: sonst kollidiert die Aufgabe \"revisionen\" mit\n        \/\/ dem Zahlenfeld gleichen Namens, und getElementById trifft das\n        \/\/ falsche Element.\n        kasten.id = 'wc-a-' + a.kennung;\n        kasten.checked = VOREINSTELLUNG.indexOf(a.kennung) !== -1;\n        zeile.appendChild(kasten);\n        zeile.appendChild(el('span', 'color: var(--text-primary, #e8e8ee); font-size: 0.88rem;', T['a_' + a.kennung]));\n        aufgabenFeld.appendChild(zeile);\n    });<\/p>\n<p>    function codeZeile(kasten, text, farbe) {\n        kasten.appendChild(el('pre', 'background: var(--bg-panel, #1e1e24); border: 1px solid var(--border, #2a2a35); color: ' + (farbe || 'var(--text-primary, #e8e8ee)') + '; padding: 10px 12px; border-radius: 5px; overflow-x: auto; font-family: monospace; font-size: 0.8rem; white-space: pre-wrap; word-break: break-all; margin: 4px 0 10px;', text));\n    }<\/p>\n<p>    btn.addEventListener('click', function () {\n        const aufgaben = {};\n        AUFGABEN.forEach(function (a) {\n            const knoten = document.getElementById('wc-a-' + a.kennung);\n            aufgaben[a.kennung] = knoten ? knoten.checked : false;\n        });<\/p>\n<p>        const erg = bauen({\n            pfad: wert('wc-pfad'),\n            praefix: wert('wc-praefix'),\n            revisionen: wert('wc-revisionen'),\n            aufgaben: aufgaben\n        });<\/p>\n<p>        out.textContent = '';\n        if (!erg.ok) {\n            out.appendChild(el('div', 'background: var(--bg-body, #14141a); border: 1px solid var(--border, #2a2a35); border-left: 3px solid #ffb86c; color: var(--text-secondary, #a0a0b0); padding: 14px; border-radius: 6px;', erg.fehler));\n            return;\n        }<\/p>\n<p>        out.appendChild(el('div', UEBERSCHRIFT, T.h_sicherung));\n        const sicherung = el('div', KASTEN);\n        codeZeile(sicherung, erg.sicherung, 'var(--accent, #7ee787)');\n        sicherung.appendChild(el('div', 'color: var(--text-secondary, #a0a0b0); font-size: 0.85rem;', T.sicherung_erklaerung));\n        out.appendChild(sicherung);<\/p>\n<p>        out.appendChild(el('div', UEBERSCHRIFT, T.h_schritte));\n        erg.schritte.forEach(function (s, i) {\n            const kasten = el('div', KASTEN);\n            kasten.appendChild(el('div', 'color: var(--text-primary, #e8e8ee); font-weight: 700; font-size: 0.9rem; margin-bottom: 6px;', (i + 1) + '. ' + s.name));\n            if (s.zaehlen) {\n                kasten.appendChild(el('div', 'color: var(--text-secondary, #a0a0b0); font-size: 0.8rem;', T.zuerst_zaehlen));\n                codeZeile(kasten, s.zaehlen);\n            }\n            kasten.appendChild(el('div', 'color: var(--text-secondary, #a0a0b0); font-size: 0.8rem;', T.dann_loeschen));\n            codeZeile(kasten, s.befehl);\n            out.appendChild(kasten);\n        });<\/p>\n<p>        if (erg.konstante) {\n            out.appendChild(el('div', UEBERSCHRIFT, T.h_konstante));\n            const kasten = el('div', KASTEN);\n            codeZeile(kasten, erg.konstante);\n            kasten.appendChild(el('div', 'color: var(--text-secondary, #a0a0b0); font-size: 0.85rem;', T.konstante_erklaerung));\n            out.appendChild(kasten);\n        }<\/p>\n<p>        out.appendChild(el('div', UEBERSCHRIFT, T.h_befunde));\n        const befunde = el('div', KASTEN);\n        erg.befunde.forEach(function (b) {\n            const z = el('div', 'display: flex; gap: 10px; padding: 5px 0;');\n            z.appendChild(el('span', 'color: ' + (b.schwer ? '#ffb86c' : 'var(--text-secondary, #a0a0b0)') + '; font-family: monospace;', b.schwer ? '!' : '-'));\n            z.appendChild(el('span', 'color: var(--text-secondary, #a0a0b0); font-size: 0.9rem; line-height: 1.5;', b.text));\n            befunde.appendChild(z);\n        });\n        out.appendChild(befunde);\n    });\n})();\n<\/script><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Setzt die WP-CLI-Befehle f\u00fcr eine Datenbankpflege zusammen, stellt jedem L\u00f6schen ein Z\u00e4hlen voran und benennt, was der jeweilige Schritt nicht zur\u00fcckholen kann.<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":9283,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"template-tool-base.php","meta":{"footnotes":""},"tags":[92256,92340,92277],"class_list":["post-10275","page","type-page","status-publish","hentry","tag-mysql-de","tag-server-administration-de","tag-wordpress-de"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>WP-CLI-Befehle f\u00fcr die Datenbankpflege bauen - Lukas Wojcik - Blog<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.lukaswojcik.com\/blog\/de\/werkzeuge\/wp-cli-database-cleanup-builder\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"WP-CLI-Befehle f\u00fcr die Datenbankpflege bauen - Lukas Wojcik - Blog\" \/>\n<meta property=\"og:description\" content=\"Setzt die WP-CLI-Befehle f\u00fcr eine Datenbankpflege zusammen, stellt jedem L\u00f6schen ein Z\u00e4hlen voran und benennt, was der jeweilige Schritt nicht zur\u00fcckholen kann.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.lukaswojcik.com\/blog\/de\/werkzeuge\/wp-cli-database-cleanup-builder\/\" \/>\n<meta property=\"og:site_name\" content=\"Lukas Wojcik - Blog\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/08\/og-default.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"630\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/werkzeuge\\\/wp-cli-database-cleanup-builder\\\/\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/werkzeuge\\\/wp-cli-database-cleanup-builder\\\/\",\"name\":\"WP-CLI-Befehle f\u00fcr die Datenbankpflege bauen - Lukas Wojcik - Blog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#website\"},\"datePublished\":\"2026-08-14T23:07:30+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/werkzeuge\\\/wp-cli-database-cleanup-builder\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/werkzeuge\\\/wp-cli-database-cleanup-builder\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/werkzeuge\\\/wp-cli-database-cleanup-builder\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Toolbox\",\"item\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/toolbox-2\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"WP-CLI-Befehle f\u00fcr die Datenbankpflege bauen\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/\",\"name\":\"Lukas Wojcik - Blog\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\",\"name\":\"luky\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\",\"contentUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\",\"width\":424,\"height\":636,\"caption\":\"luky\"},\"logo\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\"},\"sameAs\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"WP-CLI-Befehle f\u00fcr die Datenbankpflege bauen - Lukas Wojcik - Blog","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:\/\/www.lukaswojcik.com\/blog\/de\/werkzeuge\/wp-cli-database-cleanup-builder\/","og_locale":"en_US","og_type":"article","og_title":"WP-CLI-Befehle f\u00fcr die Datenbankpflege bauen - Lukas Wojcik - Blog","og_description":"Setzt die WP-CLI-Befehle f\u00fcr eine Datenbankpflege zusammen, stellt jedem L\u00f6schen ein Z\u00e4hlen voran und benennt, was der jeweilige Schritt nicht zur\u00fcckholen kann.","og_url":"https:\/\/www.lukaswojcik.com\/blog\/de\/werkzeuge\/wp-cli-database-cleanup-builder\/","og_site_name":"Lukas Wojcik - Blog","og_image":[{"width":1200,"height":630,"url":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/08\/og-default.jpg","type":"image\/jpeg"}],"twitter_card":"summary_large_image","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/werkzeuge\/wp-cli-database-cleanup-builder\/","url":"https:\/\/www.lukaswojcik.com\/blog\/de\/werkzeuge\/wp-cli-database-cleanup-builder\/","name":"WP-CLI-Befehle f\u00fcr die Datenbankpflege bauen - Lukas Wojcik - Blog","isPartOf":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#website"},"datePublished":"2026-08-14T23:07:30+00:00","breadcrumb":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/werkzeuge\/wp-cli-database-cleanup-builder\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.lukaswojcik.com\/blog\/de\/werkzeuge\/wp-cli-database-cleanup-builder\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/werkzeuge\/wp-cli-database-cleanup-builder\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.lukaswojcik.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Toolbox","item":"https:\/\/www.lukaswojcik.com\/blog\/toolbox-2\/"},{"@type":"ListItem","position":3,"name":"WP-CLI-Befehle f\u00fcr die Datenbankpflege bauen"}]},{"@type":"WebSite","@id":"https:\/\/www.lukaswojcik.com\/blog\/#website","url":"https:\/\/www.lukaswojcik.com\/blog\/","name":"Lukas Wojcik - Blog","description":"","publisher":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.lukaswojcik.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9","name":"luky","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg","url":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg","contentUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg","width":424,"height":636,"caption":"luky"},"logo":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg"},"sameAs":["https:\/\/www.lukaswojcik.com\/blog"]}]}},"_links":{"self":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/pages\/10275","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/comments?post=10275"}],"version-history":[{"count":0,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/pages\/10275\/revisions"}],"up":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/pages\/9283"}],"wp:attachment":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/media?parent=10275"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/tags?post=10275"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}