{"id":12979,"date":"2026-09-12T12:45:00","date_gmt":"2026-09-12T10:45:00","guid":{"rendered":"https:\/\/www.lukaswojcik.com\/blog\/?p=12979"},"modified":"2026-10-24T06:23:55","modified_gmt":"2026-10-24T04:23:55","slug":"tutorial-eine-langsame-meta_query-finden-und-in-einen-taxonomie-filter","status":"publish","type":"post","link":"https:\/\/www.lukaswojcik.com\/blog\/de\/wordpress-plugins-tricks-de\/tutorials-de-wordpress-plugins-tricks-de\/tutorial-eine-langsame-meta_query-finden-und-in-einen-taxonomie-filter\/","title":{"rendered":"Tutorial: Eine langsame meta_query finden und in einen Taxonomie-Filter umbauen"},"content":{"rendered":"<p>Ein langsamer Produktfilter sollte vor einem Wechsel des Datenmodells gemessen werden. Eine <code>meta_query<\/code> kann passend sein; eine Taxonomie kann kategoriale Filter unterst\u00fctzen. Weder die Anzahl der Verbindungen noch die Zahl verschiedener Werte allein sagt die schnellere L\u00f6sung voraus. Zuerst muss die neue Abfrage weiterhin dieselben Produkte ausw\u00e4hlen.<\/p>\n<h2>1. Den vollst\u00e4ndigen Filter erhalten<\/h2>\n<p>Das Beispiel sucht ver\u00f6ffentlichte Produkte mit Farbe <code>blau<\/code>, Material <code>eiche<\/code> und Verf\u00fcgbarkeit <code>1<\/code>. Vorher und nachher m\u00fcssen alle drei Bedingungen, dieselbe Sortierung und dieselbe Seiteneinteilung gelten. Die Verf\u00fcgbarkeit bleibt hier eine Metadatenbedingung.<\/p>\n<pre><code>&lt;?php\n$base = [\n    &#x27;post_type&#x27; =&gt; &#x27;produkt&#x27;,\n    &#x27;post_status&#x27; =&gt; &#x27;publish&#x27;,\n    &#x27;posts_per_page&#x27; =&gt; 20,\n    &#x27;paged&#x27; =&gt; 1,\n    &#x27;orderby&#x27; =&gt; [&#x27;date&#x27; =&gt; &#x27;DESC&#x27;, &#x27;ID&#x27; =&gt; &#x27;DESC&#x27;],\n];\n$before = new WP_Query($base + [\n    &#x27;meta_query&#x27; =&gt; [\n        &#x27;relation&#x27; =&gt; &#x27;AND&#x27;,\n        [&#x27;key&#x27; =&gt; &#x27;farbe&#x27;, &#x27;value&#x27; =&gt; &#x27;blau&#x27;],\n        [&#x27;key&#x27; =&gt; &#x27;material&#x27;, &#x27;value&#x27; =&gt; &#x27;eiche&#x27;],\n        [&#x27;key&#x27; =&gt; &#x27;verfuegbar&#x27;, &#x27;value&#x27; =&gt; &#x27;1&#x27;],\n    ],\n]);\n$after = new WP_Query($base + [\n    &#x27;tax_query&#x27; =&gt; [\n        &#x27;relation&#x27; =&gt; &#x27;AND&#x27;,\n        [&#x27;taxonomy&#x27; =&gt; &#x27;farbe&#x27;, &#x27;field&#x27; =&gt; &#x27;slug&#x27;,\n         &#x27;terms&#x27; =&gt; [&#x27;blau&#x27;], &#x27;include_children&#x27; =&gt; false],\n        [&#x27;taxonomy&#x27; =&gt; &#x27;material&#x27;, &#x27;field&#x27; =&gt; &#x27;slug&#x27;,\n         &#x27;terms&#x27; =&gt; [&#x27;eiche&#x27;], &#x27;include_children&#x27; =&gt; false],\n    ],\n    &#x27;meta_query&#x27; =&gt; [\n        [&#x27;key&#x27; =&gt; &#x27;verfuegbar&#x27;, &#x27;value&#x27; =&gt; &#x27;1&#x27;],\n    ],\n]);\n\/\/ SQL: $before-&gt;request and $after-&gt;request\n<\/code><\/pre>\n<p>Der Code setzt den eigenen Beitragstyp <code>produkt<\/code> sowie beide Taxonomien mit korrekten Zuordnungen voraus. Eine WooCommerce-Abfrage ist das nicht. Zum Vergleich werden zwei Abfragen ausgef\u00fchrt; die Anwendung w\u00fcrde die gew\u00e4hlte Fassung verwenden. Der Ergebnisabgleich muss alle relevanten Seiten und Filterkombinationen erfassen, nicht nur die ersten zwanzig Treffer.<\/p>\n<figure class=\"lw-diagram\"><img decoding=\"async\" src=\"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/diagrams\/dia-12977-meta-tax-20261024-de.png\" width=\"1120\" height=\"580\" loading=\"lazy\" alt=\"Filterbedingungen erhalten und Migration pr\u00fcfen\"><figcaption>Filterbedingungen erhalten und Migration pr\u00fcfen<\/figcaption><\/figure>\n<h2>2. Tats\u00e4chliches SQL und Abfrageplan untersuchen<\/h2>\n<p><code>$query-&gt;request<\/code> enth\u00e4lt das erzeugte SQL. Die drei positiven Metadatenbedingungen mit AND ben\u00f6tigen in diesem Beispiel \u00fcblicherweise drei Metadatenverbindungen. Eine allgemeine Regel \u201eeine Klausel, eine Verbindung\u201c folgt daraus nicht: Passende OR-Klauseln k\u00f6nnen einen Alias gemeinsam verwenden. Logische Tabellenaliase sind keine physischen Kopien der Datenbanktabelle.<\/p>\n<p>Das WordPress-Standardschema indiziert <code>post_id<\/code> und ein Pr\u00e4fix von <code>meta_key<\/code>, aber nicht <code>meta_value<\/code>. Bestehende Installationen k\u00f6nnen zus\u00e4tzliche Indizes besitzen. Der Optimierer kann bei der Beitragstabelle oder einem anderen geeigneten Zugriffspfad beginnen; s\u00e4mtliche Zeilen eines Schl\u00fcssels werden nicht zwangsl\u00e4ufig durchsucht. Doppelte Metadatenzeilen k\u00f6nnen Zwischenergebnisse vergr\u00f6\u00dfern.<\/p>\n<p>F\u00fcr einen gesch\u00fctzten Entwicklungsaufruf zeichnet <code>SAVEQUERIES<\/code> SQL, Laufzeit und Aufrufinformationen auf. Das ben\u00f6tigt zus\u00e4tzlichen Speicher und Rechenzeit; Protokolle k\u00f6nnen vertrauliche Werte enthalten. Ein Datenbankprotokoll langsamer Abfragen zeigt eine andere Perspektive und liefert nicht denselben PHP-Aufrufpfad. Die Aktivierung ben\u00f6tigt passende Rechte, einen begrenzten Messzeitraum und eine Absch\u00e4tzung der Protokollmenge. Ein global ge\u00e4nderter Sitzungsvorgabewert aktualisiert nicht jede bestehende Verbindung.<\/p>\n<p><code>EXPLAIN<\/code> beschreibt einen gesch\u00e4tzten Plan. <code>rows<\/code> und <code>filtered<\/code> geh\u00f6ren zusammen mit Verbindungsreihenfolge, Zugriffstyp und gew\u00e4hlten Indizes gelesen. Eine gro\u00dfe Sch\u00e4tzung allein beweist keinen wirkungslosen Filter. <code>Using filesort<\/code> bedeutet einen zus\u00e4tzlichen Sortierschritt, nicht zwingend eine Sortierung auf Festplatte. <code>Using temporary<\/code> ist f\u00fcr sich kein Nachweis einer schlechten Abfrage. MySQLs <code>EXPLAIN ANALYZE<\/code> f\u00fchrt die Anweisung tats\u00e4chlich aus; Syntax und Verhalten unter MariaDB sind gesondert zu pr\u00fcfen.<\/p>\n<p><code>meta_value_num<\/code> sortiert numerisch. WordPress verwendet daf\u00fcr einen numerischen Ausdruck, keinen Textvergleich. Ausdr\u00fccke und gro\u00dfe Zwischenergebnisse k\u00f6nnen den Aufwand erh\u00f6hen; die fr\u00fchere Behauptung, Sortieren koste normalerweise mehr als alle Filter, war jedoch nicht durch Messungen belegt.<\/p>\n<h2>3. Beide kategorialen Merkmale registrieren<\/h2>\n<pre><code>&lt;?php\nadd_action(&#x27;init&#x27;, function () {\n    foreach ([&#x27;farbe&#x27;, &#x27;material&#x27;] as $taxonomy) {\n        register_taxonomy($taxonomy, [&#x27;produkt&#x27;], [\n            &#x27;hierarchical&#x27; =&gt; false,\n            &#x27;public&#x27; =&gt; false,\n            &#x27;publicly_queryable&#x27; =&gt; false,\n            &#x27;show_ui&#x27; =&gt; true,\n            &#x27;show_admin_column&#x27; =&gt; true,\n            &#x27;show_in_rest&#x27; =&gt; false,\n            &#x27;query_var&#x27; =&gt; false,\n            &#x27;rewrite&#x27; =&gt; false,\n        ]);\n    }\n});\n<\/code><\/pre>\n<p>Registriert werden sowohl <code>farbe<\/code> als auch <code>material<\/code>. Das Beispiel deaktiviert \u00f6ffentliche Taxonomieabfragen und Rewrite-Routen, erlaubt aber die Verwaltung. Eine Zugriffskontrolle entsteht dadurch nicht. F\u00fcr den Blockeditor ist eine passende REST-Konfiguration einschlie\u00dflich <code>show_in_rest<\/code> erforderlich; Ver\u00f6ffentlichung und Berechtigungen der REST-Daten sind gesondert festzulegen.<\/p>\n<p><code>term_relationships<\/code> enth\u00e4lt Objekt-ID, Term-Taxonomie-ID und Begriffsreihenfolge. Der zusammengesetzte Prim\u00e4rschl\u00fcssel beginnt mit der Objekt-ID; ein eigener Index beginnt mit der Term-Taxonomie-ID. Diese Zugriffspfade k\u00f6nnen genaue Kategorievergleiche unterst\u00fctzen. Ein zusammengesetzter Index ist nicht automatisch von beiden Enden gleich gut nutzbar. Ein Ja-Nein-Merkmal ist nicht grunds\u00e4tzlich ungeeignet f\u00fcr eine Taxonomie. Der Ver\u00f6ffentlichungsstatus sollte nicht lediglich zur Abbildung von Lagerverf\u00fcgbarkeit umgedeutet werden.<\/p>\n<h2>4. Die Migration vor Schreibzugriffen planen<\/h2>\n<p>Die folgende <code>plan.php<\/code> liest ausschlie\u00dflich. Enthalten sind zwei Beispiel-IDs und ausdr\u00fcckliche Wertzuordnungen; beide Listen m\u00fcssen zum tats\u00e4chlichen Bestand passen. Die Zielbegriffe m\u00fcssen bereits existieren. Unbekannte, leere, doppelte oder strukturierte Metadaten brechen die Planung ab, statt Informationen still zu verlieren. Leere Werte ben\u00f6tigen eine festgelegte Regel: Zuordnung erhalten, entfernen oder zur Pr\u00fcfung markieren.<\/p>\n<pre><code>&lt;?php\n\/\/ Read-only example for reviewed IDs, not a complete migration runner.\n$ids = [101, 102];\n$mapping = [\n    &#x27;farbe&#x27; =&gt; [&#x27;blau&#x27; =&gt; &#x27;blau&#x27;, &#x27;rot&#x27; =&gt; &#x27;rot&#x27;],\n    &#x27;material&#x27; =&gt; [&#x27;eiche&#x27; =&gt; &#x27;eiche&#x27;, &#x27;buche&#x27; =&gt; &#x27;buche&#x27;],\n];\n$plan = [];\nforeach ($ids as $id) {\n    if (get_post_type($id) !== &#x27;produkt&#x27;) {\n        throw new RuntimeException(&quot;Unexpected post type: $id&quot;);\n    }\n    foreach ($mapping as $taxonomy =&gt; $values) {\n        if (!taxonomy_exists($taxonomy)) {\n            throw new RuntimeException(&quot;Missing taxonomy: $taxonomy&quot;);\n        }\n        $raw = get_post_meta($id, $taxonomy, false);\n        if (count($raw) !== 1 || !is_string($raw[0])\n            || !array_key_exists($raw[0], $values)) {\n            throw new RuntimeException(&quot;Unmapped or ambiguous value: $id\/$taxonomy&quot;);\n        }\n        $term = get_term_by(&#x27;slug&#x27;, $values[$raw[0]], $taxonomy);\n        if (!$term || is_wp_error($term)) {\n            throw new RuntimeException(&quot;Missing target term: $id\/$taxonomy&quot;);\n        }\n        $old = wp_get_object_terms($id, $taxonomy, [&#x27;fields&#x27; =&gt; &#x27;ids&#x27;]);\n        if (is_wp_error($old)) {\n            throw new RuntimeException($old-&gt;get_error_message());\n        }\n        $plan[] = [\n            &#x27;post_id&#x27; =&gt; $id,\n            &#x27;taxonomy&#x27; =&gt; $taxonomy,\n            &#x27;source_value&#x27; =&gt; $raw[0],\n            &#x27;old_term_ids&#x27; =&gt; array_map(&#x27;intval&#x27;, $old),\n            &#x27;new_term_ids&#x27; =&gt; [(int) $term-&gt;term_id],\n        ];\n    }\n}\necho wp_json_encode($plan, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);\n<\/code><\/pre>\n<p><code>wp eval-file plan.php<\/code> gibt die vorgesehenen Zuordnungen aus. Begriffszuordnungen und Metadaten werden dabei nicht ver\u00e4ndert. Eine vollst\u00e4ndige Migration ben\u00f6tigt zus\u00e4tzlich begrenzte Verarbeitungspakete, eine Sicherung der Quellwerte und bisherigen Zuordnungen, eine Schreibpause oder Synchronisierung s\u00e4mtlicher Schreiber sowie einen gepr\u00fcften Wiederaufnahmepfad.<\/p>\n<p>Nach Pr\u00fcfung des Plans und erneutem Vergleich aktueller Quellwerte und bisheriger Zuordnungen wendet das folgende API-Fragment eine Zeile an. Ganzzahlige Begriffs-IDs vermeiden Verwechslungen mit numerischen Begriffsnamen. Das Argument false ersetzt Zuordnungen innerhalb dieser Taxonomie; vorhandene Begriffe k\u00f6nnen dadurch entfallen.<\/p>\n<pre><code>&lt;?php\n\/\/ Fragment for one previously reviewed and revalidated plan row.\n$result = wp_set_object_terms(\n    (int) $row[&#x27;post_id&#x27;],\n    array_map(&#x27;intval&#x27;, $row[&#x27;new_term_ids&#x27;]),\n    $row[&#x27;taxonomy&#x27;],\n    false\n);\nif (is_wp_error($result)) {\n    throw new RuntimeException($result-&gt;get_error_message());\n}\n\/\/ Read back term IDs and compare them with new_term_ids.\n<\/code><\/pre>\n<p>Das Fragment ist kein atomarer Migrationslauf. Jeder Schreibzugriff ben\u00f6tigt R\u00fccklesen und Fehlerbehandlung; ein sp\u00e4terer Fehler setzt fr\u00fchere Zeilen nicht automatisch zur\u00fcck. Ein alter Plan kann nach neueren Taxonomie\u00e4nderungen aktuelle Arbeit \u00fcberschreiben. Automatische Slug-Normalisierung kann unterschiedliche Quellwerte zusammenf\u00fchren, weshalb die Zuordnung ausdr\u00fccklich festgelegt wird.<\/p>\n<h2>5. Verhalten pr\u00fcfen, bevor Metadaten entfallen<\/h2>\n<p>Zum Vergleich geh\u00f6ren Ergebnis-IDs, Reihenfolge, Trefferzahlen, fehlende Werte, doppelte Metadaten, Entw\u00fcrfe und geplante Inhalte im Migrationsumfang sowie gegebenenfalls mehrsprachige Zuordnungen. Laufzeiten ben\u00f6tigen vergleichbare Daten, Indizes, Cachezust\u00e4nde und Lastbedingungen. F\u00fcr die fr\u00fcheren Grafikwerte von 480.000 gegen\u00fcber 2.100 betrachteten Zeilen liegt keine reproduzierbare Messung vor.<\/p>\n<p>Der fr\u00fchere Befehl <code>wp post meta delete --all --keys=farbe --dry-run<\/code> war f\u00fcr diese Aufgabe ung\u00fcltig. Der dokumentierte Befehl ben\u00f6tigt eine Objekt-ID; <code>--all<\/code> bezeichnet s\u00e4mtliche Metadaten dieses Objekts, und ein solcher Dry-run-Schalter ist nicht dokumentiert. Alte Metadaten sollten bis zur Kl\u00e4rung von Schreibern, Vergleichen und R\u00fcckweg bestehen bleiben. Die Bereinigung ben\u00f6tigt einen eigenen klaren Umfang und eine Sicherung.<\/p>\n<div class=\"lw-faq\">\n<h2>Fragen und Antworten<\/h2>\n<h3>Wann ist ein anderes Datenmodell sinnvoll?<\/h3>\n<p>Zahlenbereiche k\u00f6nnen von typisierten indizierten Spalten oder einer vorhandenen Nachschlagetabelle profitieren. Kleine oder selektive Metadatenabfragen k\u00f6nnen bereits schnell sein. Weder tausende Begriffe noch wenige passende Zeilen ergeben eine allgemeing\u00fcltige Grenze. Volltextindizes zerlegen Text in Suchbegriffe und unterst\u00fctzen nicht automatisch beliebige Wortteile.<\/p>\n<h3>Was gilt bei WooCommerce?<\/h3>\n<p>Zuerst sind vorhandene Produkteigenschaften, Sichtbarkeitsregeln und Nachschlagetabellen zu untersuchen. Beitragstyp und Daten-APIs von WooCommerce unterscheiden sich vom erfundenen Beispiel. Eine parallele eigene Taxonomie darf Lagerbestand, Sichtbarkeit, \u00dcbersetzungen oder Erweiterungsverhalten nicht umgehen.<\/p>\n<\/div>\n<h2>Quellen<\/h2>\n<ul>\n<li><a href=\"https:\/\/developer.wordpress.org\/reference\/classes\/wp_meta_query\/find_compatible_table_alias\/\">WP_Meta_Query: compatible aliases<\/a><\/li>\n<li><a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/register_taxonomy\/\">register_taxonomy<\/a><\/li>\n<li><a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/wp_set_object_terms\/\">wp_set_object_terms<\/a><\/li>\n<li><a href=\"https:\/\/developer.wordpress.org\/cli\/commands\/post\/meta\/delete\/\">WP-CLI: post meta delete<\/a><\/li>\n<li><a href=\"https:\/\/dev.mysql.com\/doc\/refman\/8.4\/en\/explain-output.html\">MySQL: EXPLAIN output<\/a><\/li>\n<li><a href=\"https:\/\/dev.mysql.com\/doc\/refman\/8.4\/en\/slow-query-log.html\">MySQL: slow query log<\/a><\/li>\n<li><a href=\"https:\/\/developer.wordpress.org\/advanced-administration\/debug\/debug-wordpress\/\">WordPress: debugging<\/a><\/li>\n<li><a href=\"https:\/\/developer.wordpress.org\/reference\/classes\/wp_query\/\">WP_Query<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Ein Taxonomie-Filter kann kategoriale Produktsuchen unterst\u00fctzen, wenn s\u00e4mtliche bisherigen Bedingungen erhalten bleiben. Das Tutorial erkl\u00e4rt SQL-Pr\u00fcfung, Ergebnisvergleich und lesende Migrationsplanung ohne unbelegte Beschleunigungsversprechen.<\/p>\n","protected":false},"author":1,"featured_media":24150,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[92644],"tags":[92256,92274,92235,92292,92277],"class_list":["post-12979","post","type-post","status-publish","format-standard","hentry","category-tutorials-de-wordpress-plugins-tricks-de","tag-mysql-de","tag-php-de","tag-tutorial-de","tag-web-performance-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>Tutorial: Eine langsame meta_query finden und in einen Taxonomie-Filter umbauen | Lukas Wojcik<\/title>\n<meta name=\"description\" content=\"Das SQL lesen, das WP_Query baut, es mit EXPLAIN messen und den Filter aus wp_postmeta in eine Taxonomie verlegen, die MySQL indizieren kann.\" \/>\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\/wordpress-plugins-tricks-de\/tutorials-de-wordpress-plugins-tricks-de\/tutorial-eine-langsame-meta_query-finden-und-in-einen-taxonomie-filter\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Tutorial: Eine langsame meta_query finden und in einen Taxonomie-Filter umbauen | Lukas Wojcik\" \/>\n<meta property=\"og:description\" content=\"Das SQL lesen, das WP_Query baut, es mit EXPLAIN messen und den Filter aus wp_postmeta in eine Taxonomie verlegen, die MySQL indizieren kann.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.lukaswojcik.com\/blog\/de\/wordpress-plugins-tricks-de\/tutorials-de-wordpress-plugins-tricks-de\/tutorial-eine-langsame-meta_query-finden-und-in-einen-taxonomie-filter\/\" \/>\n<meta property=\"og:site_name\" content=\"Lukas Wojcik - Blog\" \/>\n<meta property=\"article:published_time\" content=\"2026-09-12T10:45:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-10-24T04:23:55+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/10\/hero-12979-meta-tax-20261024-dark.png\" \/>\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\/png\" \/>\n<meta name=\"author\" content=\"Lukas Wojcik\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Lukas Wojcik\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"8 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/wordpress-plugins-tricks-de\\\/tutorials-de-wordpress-plugins-tricks-de\\\/tutorial-eine-langsame-meta_query-finden-und-in-einen-taxonomie-filter\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/wordpress-plugins-tricks-de\\\/tutorials-de-wordpress-plugins-tricks-de\\\/tutorial-eine-langsame-meta_query-finden-und-in-einen-taxonomie-filter\\\/\"},\"author\":{\"name\":\"Lukas Wojcik\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\"},\"headline\":\"Tutorial: Eine langsame meta_query finden und in einen Taxonomie-Filter umbauen\",\"datePublished\":\"2026-09-12T10:45:00+00:00\",\"dateModified\":\"2026-10-24T04:23:55+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/wordpress-plugins-tricks-de\\\/tutorials-de-wordpress-plugins-tricks-de\\\/tutorial-eine-langsame-meta_query-finden-und-in-einen-taxonomie-filter\\\/\"},\"wordCount\":956,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\"},\"image\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/wordpress-plugins-tricks-de\\\/tutorials-de-wordpress-plugins-tricks-de\\\/tutorial-eine-langsame-meta_query-finden-und-in-einen-taxonomie-filter\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/10\\\/hero-12979-meta-tax-20261024-dark.png\",\"keywords\":[\"MySQL\",\"PHP\",\"Tutorial\",\"Web Performance\",\"WordPress\"],\"articleSection\":[\"Tutorials\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/wordpress-plugins-tricks-de\\\/tutorials-de-wordpress-plugins-tricks-de\\\/tutorial-eine-langsame-meta_query-finden-und-in-einen-taxonomie-filter\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/wordpress-plugins-tricks-de\\\/tutorials-de-wordpress-plugins-tricks-de\\\/tutorial-eine-langsame-meta_query-finden-und-in-einen-taxonomie-filter\\\/\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/wordpress-plugins-tricks-de\\\/tutorials-de-wordpress-plugins-tricks-de\\\/tutorial-eine-langsame-meta_query-finden-und-in-einen-taxonomie-filter\\\/\",\"name\":\"Tutorial: Eine langsame meta_query finden und in einen Taxonomie-Filter umbauen | Lukas Wojcik\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/wordpress-plugins-tricks-de\\\/tutorials-de-wordpress-plugins-tricks-de\\\/tutorial-eine-langsame-meta_query-finden-und-in-einen-taxonomie-filter\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/wordpress-plugins-tricks-de\\\/tutorials-de-wordpress-plugins-tricks-de\\\/tutorial-eine-langsame-meta_query-finden-und-in-einen-taxonomie-filter\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/10\\\/hero-12979-meta-tax-20261024-dark.png\",\"datePublished\":\"2026-09-12T10:45:00+00:00\",\"dateModified\":\"2026-10-24T04:23:55+00:00\",\"description\":\"Das SQL lesen, das WP_Query baut, es mit EXPLAIN messen und den Filter aus wp_postmeta in eine Taxonomie verlegen, die MySQL indizieren kann.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/wordpress-plugins-tricks-de\\\/tutorials-de-wordpress-plugins-tricks-de\\\/tutorial-eine-langsame-meta_query-finden-und-in-einen-taxonomie-filter\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/wordpress-plugins-tricks-de\\\/tutorials-de-wordpress-plugins-tricks-de\\\/tutorial-eine-langsame-meta_query-finden-und-in-einen-taxonomie-filter\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/wordpress-plugins-tricks-de\\\/tutorials-de-wordpress-plugins-tricks-de\\\/tutorial-eine-langsame-meta_query-finden-und-in-einen-taxonomie-filter\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/10\\\/hero-12979-meta-tax-20261024-dark.png\",\"contentUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/10\\\/hero-12979-meta-tax-20261024-dark.png\",\"width\":1200,\"height\":630,\"caption\":\"Tutorial: Eine langsame meta_query finden und in einen Taxonomie-Filter umbauen\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/wordpress-plugins-tricks-de\\\/tutorials-de-wordpress-plugins-tricks-de\\\/tutorial-eine-langsame-meta_query-finden-und-in-einen-taxonomie-filter\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Tutorial: Eine langsame meta_query finden und in einen Taxonomie-Filter umbauen\"}]},{\"@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\":\"Lukas Wojcik\",\"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\":\"Lukas Wojcik\"},\"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":"Tutorial: Eine langsame meta_query finden und in einen Taxonomie-Filter umbauen | Lukas Wojcik","description":"Das SQL lesen, das WP_Query baut, es mit EXPLAIN messen und den Filter aus wp_postmeta in eine Taxonomie verlegen, die MySQL indizieren kann.","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\/wordpress-plugins-tricks-de\/tutorials-de-wordpress-plugins-tricks-de\/tutorial-eine-langsame-meta_query-finden-und-in-einen-taxonomie-filter\/","og_locale":"en_US","og_type":"article","og_title":"Tutorial: Eine langsame meta_query finden und in einen Taxonomie-Filter umbauen | Lukas Wojcik","og_description":"Das SQL lesen, das WP_Query baut, es mit EXPLAIN messen und den Filter aus wp_postmeta in eine Taxonomie verlegen, die MySQL indizieren kann.","og_url":"https:\/\/www.lukaswojcik.com\/blog\/de\/wordpress-plugins-tricks-de\/tutorials-de-wordpress-plugins-tricks-de\/tutorial-eine-langsame-meta_query-finden-und-in-einen-taxonomie-filter\/","og_site_name":"Lukas Wojcik - Blog","article_published_time":"2026-09-12T10:45:00+00:00","article_modified_time":"2026-10-24T04:23:55+00:00","og_image":[{"width":1200,"height":630,"url":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/10\/hero-12979-meta-tax-20261024-dark.png","type":"image\/png"}],"author":"Lukas Wojcik","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Lukas Wojcik","Est. reading time":"8 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/wordpress-plugins-tricks-de\/tutorials-de-wordpress-plugins-tricks-de\/tutorial-eine-langsame-meta_query-finden-und-in-einen-taxonomie-filter\/#article","isPartOf":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/wordpress-plugins-tricks-de\/tutorials-de-wordpress-plugins-tricks-de\/tutorial-eine-langsame-meta_query-finden-und-in-einen-taxonomie-filter\/"},"author":{"name":"Lukas Wojcik","@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9"},"headline":"Tutorial: Eine langsame meta_query finden und in einen Taxonomie-Filter umbauen","datePublished":"2026-09-12T10:45:00+00:00","dateModified":"2026-10-24T04:23:55+00:00","mainEntityOfPage":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/wordpress-plugins-tricks-de\/tutorials-de-wordpress-plugins-tricks-de\/tutorial-eine-langsame-meta_query-finden-und-in-einen-taxonomie-filter\/"},"wordCount":956,"commentCount":0,"publisher":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9"},"image":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/wordpress-plugins-tricks-de\/tutorials-de-wordpress-plugins-tricks-de\/tutorial-eine-langsame-meta_query-finden-und-in-einen-taxonomie-filter\/#primaryimage"},"thumbnailUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/10\/hero-12979-meta-tax-20261024-dark.png","keywords":["MySQL","PHP","Tutorial","Web Performance","WordPress"],"articleSection":["Tutorials"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.lukaswojcik.com\/blog\/de\/wordpress-plugins-tricks-de\/tutorials-de-wordpress-plugins-tricks-de\/tutorial-eine-langsame-meta_query-finden-und-in-einen-taxonomie-filter\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/wordpress-plugins-tricks-de\/tutorials-de-wordpress-plugins-tricks-de\/tutorial-eine-langsame-meta_query-finden-und-in-einen-taxonomie-filter\/","url":"https:\/\/www.lukaswojcik.com\/blog\/de\/wordpress-plugins-tricks-de\/tutorials-de-wordpress-plugins-tricks-de\/tutorial-eine-langsame-meta_query-finden-und-in-einen-taxonomie-filter\/","name":"Tutorial: Eine langsame meta_query finden und in einen Taxonomie-Filter umbauen | Lukas Wojcik","isPartOf":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/wordpress-plugins-tricks-de\/tutorials-de-wordpress-plugins-tricks-de\/tutorial-eine-langsame-meta_query-finden-und-in-einen-taxonomie-filter\/#primaryimage"},"image":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/wordpress-plugins-tricks-de\/tutorials-de-wordpress-plugins-tricks-de\/tutorial-eine-langsame-meta_query-finden-und-in-einen-taxonomie-filter\/#primaryimage"},"thumbnailUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/10\/hero-12979-meta-tax-20261024-dark.png","datePublished":"2026-09-12T10:45:00+00:00","dateModified":"2026-10-24T04:23:55+00:00","description":"Das SQL lesen, das WP_Query baut, es mit EXPLAIN messen und den Filter aus wp_postmeta in eine Taxonomie verlegen, die MySQL indizieren kann.","breadcrumb":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/wordpress-plugins-tricks-de\/tutorials-de-wordpress-plugins-tricks-de\/tutorial-eine-langsame-meta_query-finden-und-in-einen-taxonomie-filter\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.lukaswojcik.com\/blog\/de\/wordpress-plugins-tricks-de\/tutorials-de-wordpress-plugins-tricks-de\/tutorial-eine-langsame-meta_query-finden-und-in-einen-taxonomie-filter\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/wordpress-plugins-tricks-de\/tutorials-de-wordpress-plugins-tricks-de\/tutorial-eine-langsame-meta_query-finden-und-in-einen-taxonomie-filter\/#primaryimage","url":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/10\/hero-12979-meta-tax-20261024-dark.png","contentUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/10\/hero-12979-meta-tax-20261024-dark.png","width":1200,"height":630,"caption":"Tutorial: Eine langsame meta_query finden und in einen Taxonomie-Filter umbauen"},{"@type":"BreadcrumbList","@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/wordpress-plugins-tricks-de\/tutorials-de-wordpress-plugins-tricks-de\/tutorial-eine-langsame-meta_query-finden-und-in-einen-taxonomie-filter\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.lukaswojcik.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Tutorial: Eine langsame meta_query finden und in einen Taxonomie-Filter umbauen"}]},{"@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":"Lukas Wojcik","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":"Lukas Wojcik"},"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\/posts\/12979","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"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=12979"}],"version-history":[{"count":5,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts\/12979\/revisions"}],"predecessor-version":[{"id":24155,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts\/12979\/revisions\/24155"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/media\/24150"}],"wp:attachment":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/media?parent=12979"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/categories?post=12979"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/tags?post=12979"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}