{"id":12981,"date":"2026-09-12T18:25:00","date_gmt":"2026-09-12T16:25:00","guid":{"rendered":"https:\/\/www.lukaswojcik.com\/blog\/?p=12981"},"modified":"2026-10-26T12:43:44","modified_gmt":"2026-10-26T11:43:44","slug":"tutorial-jak-znalezc-wolne-meta_query-i-przepisac-je-na-filtr-taksonomii","status":"publish","type":"post","link":"https:\/\/www.lukaswojcik.com\/blog\/pl\/wordpress-plugins-tricks-pl\/tutorials-pl-wordpress-plugins-tricks-pl\/tutorial-jak-znalezc-wolne-meta_query-i-przepisac-je-na-filtr-taksonomii\/","title":{"rendered":"Tutorial: Jak znale\u017a\u0107 wolne meta_query i przepisa\u0107 je na filtr taksonomii"},"content":{"rendered":"<p>Taksonomia przypisuje produkty do nazwanych cech, takich jak kolor lub materia\u0142. Wolny filtr produkt\u00f3w wymaga pomiaru przed zmian\u0105 modelu danych. <code>meta_query<\/code> mo\u017ce by\u0107 w\u0142a\u015bciwym rozwi\u0105zaniem, a taksonomia mo\u017ce pom\u00f3c przy filtrowaniu kategorii. Sama liczba z\u0142\u0105cze\u0144 ani r\u00f3\u017cnych warto\u015bci nie wskazuje szybszego wariantu. Najpierw nowa kwerenda musi nadal wybiera\u0107 te same produkty.<\/p>\n<h2>1. Zachowanie ca\u0142ego filtra<\/h2>\n<p>Przyk\u0142ad wyszukuje opublikowane produkty o kolorze <code>blau<\/code>, materiale <code>eiche<\/code> i dost\u0119pno\u015bci <code>1<\/code>. Oba warianty musz\u0105 zachowa\u0107 trzy warunki, kolejno\u015b\u0107 i podzia\u0142 na strony. Dost\u0119pno\u015b\u0107 pozostaje tutaj warunkiem metadanych.<\/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>Kod zak\u0142ada istniej\u0105cy w\u0142asny typ wpisu <code>produkt<\/code> oraz obie taksonomie z poprawnymi przypisaniami. Nie jest to zapytanie WooCommerce. Por\u00f3wnanie wykonuje dwa zapytania; aplikacja korzysta\u0142aby z wybranego wariantu. Kontrola zgodno\u015bci musi obejmowa\u0107 wszystkie istotne strony i kombinacje filtr\u00f3w, a nie tylko pierwszych dwadzie\u015bcia wynik\u00f3w.<\/p>\n<figure class=\"lw-diagram\"><img decoding=\"async\" src=\"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/diagrams\/dia-12977-meta-tax-20261024-pl.png\" width=\"1120\" height=\"580\" loading=\"lazy\" alt=\"Zachowanie warunk\u00f3w filtra i kontrola migracji\"><figcaption>Zachowanie warunk\u00f3w filtra i kontrola migracji<\/figcaption><\/figure>\n<h2>2. Kontrola rzeczywistego SQL i planu<\/h2>\n<p><code>$query-&gt;request<\/code> zawiera wygenerowany SQL. Trzy dodatnie warunki metadanych po\u0142\u0105czone przez AND zwykle wymagaj\u0105 w tym przyk\u0142adzie trzech z\u0142\u0105cze\u0144. Nie istnieje jednak uniwersalna zasada \u201ejedna klauzula, jedno z\u0142\u0105czenie\u201d: zgodne klauzule OR mog\u0105 wsp\u00f3\u0142dzieli\u0107 alias. Logiczne aliasy nie s\u0105 fizycznymi kopiami tabeli bazy danych.<\/p>\n<p>Standardowy schemat WordPressa indeksuje <code>post_id<\/code> i prefiks <code>meta_key<\/code>, lecz nie <code>meta_value<\/code>. Konkretna instalacja mo\u017ce mie\u0107 dodatkowe indeksy. Optymalizator mo\u017ce rozpocz\u0105\u0107 od tabeli wpis\u00f3w lub innej \u015bcie\u017cki dost\u0119pu; nie zawsze przegl\u0105da wszystkie wiersze danego klucza. Powielone metadane mog\u0105 zwi\u0119ksza\u0107 wyniki po\u015brednie.<\/p>\n<p>W chronionym wywo\u0142aniu deweloperskim <code>SAVEQUERIES<\/code> zapisuje SQL, czas wykonania i informacje o wywo\u0142aniu. Zwi\u0119ksza zu\u017cycie pami\u0119ci i obci\u0105\u017cenie; logi mog\u0105 zawiera\u0107 poufne warto\u015bci. Dziennik wolnych zapyta\u0144 bazy daje inn\u0105 perspektyw\u0119 i nie dostarcza tej samej \u015bcie\u017cki wywo\u0142a\u0144 PHP. W\u0142\u0105czenie wymaga odpowiednich uprawnie\u0144, ograniczonego czasu pomiaru i oceny ilo\u015bci log\u00f3w. Zmiana globalnej warto\u015bci domy\u015blnej sesji nie aktualizuje wszystkich istniej\u0105cych po\u0142\u0105cze\u0144.<\/p>\n<p><code>EXPLAIN<\/code> przedstawia plan szacunkowy. <code>rows<\/code> i <code>filtered<\/code> wymagaj\u0105 wsp\u00f3lnej interpretacji z kolejno\u015bci\u0105 z\u0142\u0105cze\u0144, typem dost\u0119pu i wybranymi indeksami. Du\u017ce oszacowanie nie dowodzi nieskuteczno\u015bci filtra. <code>Using filesort<\/code> oznacza dodatkowe sortowanie, niekoniecznie na dysku. <code>Using temporary<\/code> samo w sobie nie dowodzi z\u0142ego zapytania. MySQL <code>EXPLAIN ANALYZE<\/code> rzeczywi\u015bcie wykonuje instrukcj\u0119; sk\u0142adnia i zachowanie MariaDB wymagaj\u0105 osobnej kontroli.<\/p>\n<p><code>meta_value_num<\/code> sortuje liczbowo. WordPress u\u017cywa wyra\u017cenia numerycznego, a nie por\u00f3wnania tekstu. Wyra\u017cenia i du\u017ce wyniki po\u015brednie mog\u0105 zwi\u0119ksza\u0107 koszt, lecz wcze\u015bniejsze twierdzenie o zwykle wi\u0119kszym koszcie sortowania ni\u017c wszystkich filtr\u00f3w nie mia\u0142o podstawy pomiarowej.<\/p>\n<h2>3. Rejestracja obu cech kategorialnych<\/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>Rejestrowane s\u0105 zar\u00f3wno <code>farbe<\/code>, jak i <code>material<\/code>. Przyk\u0142ad wy\u0142\u0105cza publiczne zapytania taksonomii i regu\u0142y adres\u00f3w, zachowuj\u0105c zarz\u0105dzanie. Nie tworzy to kontroli dost\u0119pu. Edytor blokowy wymaga odpowiedniej konfiguracji REST, w tym <code>show_in_rest<\/code>; udost\u0119pnianie danych i uprawnienia REST wymagaj\u0105 osobnej decyzji.<\/p>\n<p><code>term_relationships<\/code> zawiera identyfikator obiektu, identyfikator terminu taksonomii i kolejno\u015b\u0107 terminu. Z\u0142o\u017cony klucz g\u0142\u00f3wny zaczyna si\u0119 od ID obiektu, a osobny indeks od ID terminu taksonomii. Te \u015bcie\u017cki dost\u0119pu mog\u0105 pomaga\u0107 w dok\u0142adnym dopasowaniu kategorii. Indeks z\u0142o\u017cony nie dzia\u0142a automatycznie r\u00f3wnie dobrze od obu ko\u0144c\u00f3w. Cecha tak\u2013nie nie jest z zasady nieodpowiednia dla taksonomii. Status publikacji nie powinien zmienia\u0107 znaczenia wy\u0142\u0105cznie po to, by oznacza\u0107 dost\u0119pno\u015b\u0107 magazynow\u0105.<\/p>\n<h2>4. Plan migracji przed zapisem<\/h2>\n<p>Poni\u017cszy <code>plan.php<\/code> wy\u0142\u0105cznie odczytuje dane. Zawiera dwa przyk\u0142adowe ID i jawne mapowanie warto\u015bci; obie listy wymagaj\u0105 dostosowania do faktycznych danych. Docelowe terminy musz\u0105 ju\u017c istnie\u0107. Nieznane, puste, powielone lub z\u0142o\u017cone metadane zatrzymuj\u0105 plan zamiast cicho gubi\u0107 informacje. Puste warto\u015bci wymagaj\u0105 okre\u015blonej polityki: zachowania przypisania, usuni\u0119cia albo skierowania do kontroli.<\/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> wypisuje proponowane przypisania. Nie zmienia termin\u00f3w ani metadanych. Pe\u0142na migracja wymaga ponadto ograniczonych partii, kopii warto\u015bci \u017ar\u00f3d\u0142owych i starych przypisa\u0144, przerwy w zapisie albo synchronizacji wszystkich \u017ar\u00f3de\u0142 zmian oraz sprawdzonego wznawiania.<\/p>\n<p>Po kontroli planu i ponownym por\u00f3wnaniu bie\u017c\u0105cych warto\u015bci oraz starych przypisa\u0144 poni\u017cszy fragment API stosuje jeden wiersz. Ca\u0142kowite ID termin\u00f3w zapobiegaj\u0105 pomyleniu z nazwami sk\u0142adaj\u0105cymi si\u0119 z cyfr. Argument false zast\u0119puje przypisania w tej taksonomii, wi\u0119c dotychczasowe terminy mog\u0105 znikn\u0105\u0107.<\/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>Fragment nie wykonuje wszystkich zmian jako jednej operacji, kt\u00f3ra albo ko\u0144czy si\u0119 w ca\u0142o\u015bci, albo zostaje w ca\u0142o\u015bci cofni\u0119ta. Ka\u017cdy zapis wymaga ponownego odczytu i obs\u0142ugi b\u0142\u0119d\u00f3w; p\u00f3\u017aniejsza awaria nie cofa automatycznie wcze\u015bniejszych wierszy. Stary plan mo\u017ce nadpisa\u0107 nowsze zmiany taksonomii. Automatyczna normalizacja slugu mo\u017ce po\u0142\u0105czy\u0107 r\u00f3\u017cne warto\u015bci \u017ar\u00f3d\u0142owe, dlatego mapowanie jest jawne.<\/p>\n<h2>5. Weryfikacja przed wycofaniem metadanych<\/h2>\n<p>Por\u00f3wnanie obejmuje ID wynik\u00f3w, kolejno\u015b\u0107, liczby trafie\u0144, brakuj\u0105ce warto\u015bci, powielone metadane, szkice i wpisy zaplanowane w zakresie migracji oraz ewentualne przypisania wieloj\u0119zyczne. Pomiar czasu wymaga por\u00f3wnywalnych danych, indeks\u00f3w, pami\u0119ci podr\u0119cznej i obci\u0105\u017cenia. Dla wcze\u015bniejszych liczb 480 000 wobec 2 100 przegl\u0105danych wierszy na grafice nie ma odtwarzalnego pomiaru.<\/p>\n<p>Wcze\u015bniejsze polecenie <code>wp post meta delete --all --keys=farbe --dry-run<\/code> by\u0142o niepoprawne dla tego zadania. Udokumentowane polecenie wymaga ID obiektu; <code>--all<\/code> oznacza wszystkie metadane tego obiektu, a taki prze\u0142\u0105cznik dry-run nie jest udokumentowany. Stare metadane powinny pozosta\u0107 do wyja\u015bnienia zapis\u00f3w, por\u00f3wna\u0144 i mo\u017cliwo\u015bci powrotu. Czyszczenie wymaga osobnego, jawnego zakresu oraz kopii danych.<\/p>\n<div class=\"lw-faq\">\n<h2>Pytania i odpowiedzi<\/h2>\n<h3>Kiedy inny model danych jest korzystniejszy?<\/h3>\n<p>Zakresy liczbowe mog\u0105 korzysta\u0107 z typowanych indeksowanych kolumn lub istniej\u0105cej tabeli pomocniczej. Ma\u0142e lub selektywne zapytania metadanych mog\u0105 ju\u017c dzia\u0142a\u0107 szybko. Ani tysi\u0105ce termin\u00f3w, ani kilka pasuj\u0105cych wierszy nie wyznaczaj\u0105 uniwersalnego progu. Indeksy pe\u0142notekstowe dziel\u0105 tekst na tokeny i nie obs\u0142uguj\u0105 automatycznie dowolnych fragment\u00f3w s\u0142owa.<\/p>\n<h3>Co zmienia WooCommerce?<\/h3>\n<p>Najpierw potrzebna jest kontrola istniej\u0105cych atrybut\u00f3w, regu\u0142 widoczno\u015bci i tabel pomocniczych. Typ produktu i interfejsy danych WooCommerce r\u00f3\u017cni\u0105 si\u0119 od fikcyjnego przyk\u0142adu. R\u00f3wnoleg\u0142a w\u0142asna taksonomia nie mo\u017ce omija\u0107 magazynu, widoczno\u015bci, t\u0142umacze\u0144 ani dzia\u0142ania rozszerze\u0144.<\/p>\n<\/div>\n<h2>\u0179r\u00f3d\u0142a<\/h2>\n<ul>\n<li><a href=\"https:\/\/developer.wordpress.org\/reference\/classes\/wp_meta_query\/find_compatible_table_alias\/\">WP_Meta_Query: wsp\u00f3\u0142dzielone aliasy tabel<\/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: wynik EXPLAIN<\/a><\/li>\n<li><a href=\"https:\/\/dev.mysql.com\/doc\/refman\/8.4\/en\/slow-query-log.html\">MySQL: dziennik wolnych zapyta\u0144<\/a><\/li>\n<li><a href=\"https:\/\/developer.wordpress.org\/advanced-administration\/debug\/debug-wordpress\/\">WordPress: wyszukiwanie b\u0142\u0119d\u00f3w<\/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>Filtr taksonomii mo\u017ce pom\u00f3c w wyszukiwaniu produkt\u00f3w wed\u0142ug kategorii, je\u015bli zachowuje wszystkie wcze\u015bniejsze warunki. Poradnik obja\u015bnia kontrol\u0119 SQL, por\u00f3wnanie wynik\u00f3w i plan migracji tylko do odczytu, bez niezmierzonych obietnic przyspieszenia.<\/p>\n","protected":false},"author":1,"featured_media":24152,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[92646],"tags":[92262,92280,92238,92283,92286],"class_list":["post-12981","post","type-post","status-publish","format-standard","hentry","category-tutorials-pl-wordpress-plugins-tricks-pl","tag-mysql-pl","tag-php-pl","tag-tutorial-pl","tag-web-performance-pl","tag-wordpress-pl"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Tutorial: Jak znale\u017a\u0107 wolne meta_query i przepisa\u0107 je na filtr taksonomii | Lukas Wojcik<\/title>\n<meta name=\"description\" content=\"Odczyt SQL budowanego przez WP_Query, pomiar przez EXPLAIN i przeniesienie filtra z wp_postmeta do taksonomii, kt\u00f3r\u0105 MySQL potrafi indeksowa\u0107.\" \/>\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\/pl\/wordpress-plugins-tricks-pl\/tutorials-pl-wordpress-plugins-tricks-pl\/tutorial-jak-znalezc-wolne-meta_query-i-przepisac-je-na-filtr-taksonomii\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Tutorial: Jak znale\u017a\u0107 wolne meta_query i przepisa\u0107 je na filtr taksonomii | Lukas Wojcik\" \/>\n<meta property=\"og:description\" content=\"Odczyt SQL budowanego przez WP_Query, pomiar przez EXPLAIN i przeniesienie filtra z wp_postmeta do taksonomii, kt\u00f3r\u0105 MySQL potrafi indeksowa\u0107.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.lukaswojcik.com\/blog\/pl\/wordpress-plugins-tricks-pl\/tutorials-pl-wordpress-plugins-tricks-pl\/tutorial-jak-znalezc-wolne-meta_query-i-przepisac-je-na-filtr-taksonomii\/\" \/>\n<meta property=\"og:site_name\" content=\"Lukas Wojcik - Blog\" \/>\n<meta property=\"article:published_time\" content=\"2026-09-12T16:25:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-10-26T11:43:44+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/10\/hero-12981-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\\\/pl\\\/wordpress-plugins-tricks-pl\\\/tutorials-pl-wordpress-plugins-tricks-pl\\\/tutorial-jak-znalezc-wolne-meta_query-i-przepisac-je-na-filtr-taksonomii\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/wordpress-plugins-tricks-pl\\\/tutorials-pl-wordpress-plugins-tricks-pl\\\/tutorial-jak-znalezc-wolne-meta_query-i-przepisac-je-na-filtr-taksonomii\\\/\"},\"author\":{\"name\":\"Lukas Wojcik\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\"},\"headline\":\"Tutorial: Jak znale\u017a\u0107 wolne meta_query i przepisa\u0107 je na filtr taksonomii\",\"datePublished\":\"2026-09-12T16:25:00+00:00\",\"dateModified\":\"2026-10-26T11:43:44+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/wordpress-plugins-tricks-pl\\\/tutorials-pl-wordpress-plugins-tricks-pl\\\/tutorial-jak-znalezc-wolne-meta_query-i-przepisac-je-na-filtr-taksonomii\\\/\"},\"wordCount\":1039,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\"},\"image\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/wordpress-plugins-tricks-pl\\\/tutorials-pl-wordpress-plugins-tricks-pl\\\/tutorial-jak-znalezc-wolne-meta_query-i-przepisac-je-na-filtr-taksonomii\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/10\\\/hero-12981-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\\\/pl\\\/wordpress-plugins-tricks-pl\\\/tutorials-pl-wordpress-plugins-tricks-pl\\\/tutorial-jak-znalezc-wolne-meta_query-i-przepisac-je-na-filtr-taksonomii\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/wordpress-plugins-tricks-pl\\\/tutorials-pl-wordpress-plugins-tricks-pl\\\/tutorial-jak-znalezc-wolne-meta_query-i-przepisac-je-na-filtr-taksonomii\\\/\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/wordpress-plugins-tricks-pl\\\/tutorials-pl-wordpress-plugins-tricks-pl\\\/tutorial-jak-znalezc-wolne-meta_query-i-przepisac-je-na-filtr-taksonomii\\\/\",\"name\":\"Tutorial: Jak znale\u017a\u0107 wolne meta_query i przepisa\u0107 je na filtr taksonomii | Lukas Wojcik\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/wordpress-plugins-tricks-pl\\\/tutorials-pl-wordpress-plugins-tricks-pl\\\/tutorial-jak-znalezc-wolne-meta_query-i-przepisac-je-na-filtr-taksonomii\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/wordpress-plugins-tricks-pl\\\/tutorials-pl-wordpress-plugins-tricks-pl\\\/tutorial-jak-znalezc-wolne-meta_query-i-przepisac-je-na-filtr-taksonomii\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/10\\\/hero-12981-meta-tax-20261024-dark.png\",\"datePublished\":\"2026-09-12T16:25:00+00:00\",\"dateModified\":\"2026-10-26T11:43:44+00:00\",\"description\":\"Odczyt SQL budowanego przez WP_Query, pomiar przez EXPLAIN i przeniesienie filtra z wp_postmeta do taksonomii, kt\u00f3r\u0105 MySQL potrafi indeksowa\u0107.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/wordpress-plugins-tricks-pl\\\/tutorials-pl-wordpress-plugins-tricks-pl\\\/tutorial-jak-znalezc-wolne-meta_query-i-przepisac-je-na-filtr-taksonomii\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/wordpress-plugins-tricks-pl\\\/tutorials-pl-wordpress-plugins-tricks-pl\\\/tutorial-jak-znalezc-wolne-meta_query-i-przepisac-je-na-filtr-taksonomii\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/wordpress-plugins-tricks-pl\\\/tutorials-pl-wordpress-plugins-tricks-pl\\\/tutorial-jak-znalezc-wolne-meta_query-i-przepisac-je-na-filtr-taksonomii\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/10\\\/hero-12981-meta-tax-20261024-dark.png\",\"contentUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/10\\\/hero-12981-meta-tax-20261024-dark.png\",\"width\":1200,\"height\":630,\"caption\":\"Tutorial: Jak znale\u017a\u0107 wolne meta_query i przepisa\u0107 je na filtr taksonomii\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/wordpress-plugins-tricks-pl\\\/tutorials-pl-wordpress-plugins-tricks-pl\\\/tutorial-jak-znalezc-wolne-meta_query-i-przepisac-je-na-filtr-taksonomii\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Tutorial: Jak znale\u017a\u0107 wolne meta_query i przepisa\u0107 je na filtr taksonomii\"}]},{\"@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: Jak znale\u017a\u0107 wolne meta_query i przepisa\u0107 je na filtr taksonomii | Lukas Wojcik","description":"Odczyt SQL budowanego przez WP_Query, pomiar przez EXPLAIN i przeniesienie filtra z wp_postmeta do taksonomii, kt\u00f3r\u0105 MySQL potrafi indeksowa\u0107.","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\/pl\/wordpress-plugins-tricks-pl\/tutorials-pl-wordpress-plugins-tricks-pl\/tutorial-jak-znalezc-wolne-meta_query-i-przepisac-je-na-filtr-taksonomii\/","og_locale":"en_US","og_type":"article","og_title":"Tutorial: Jak znale\u017a\u0107 wolne meta_query i przepisa\u0107 je na filtr taksonomii | Lukas Wojcik","og_description":"Odczyt SQL budowanego przez WP_Query, pomiar przez EXPLAIN i przeniesienie filtra z wp_postmeta do taksonomii, kt\u00f3r\u0105 MySQL potrafi indeksowa\u0107.","og_url":"https:\/\/www.lukaswojcik.com\/blog\/pl\/wordpress-plugins-tricks-pl\/tutorials-pl-wordpress-plugins-tricks-pl\/tutorial-jak-znalezc-wolne-meta_query-i-przepisac-je-na-filtr-taksonomii\/","og_site_name":"Lukas Wojcik - Blog","article_published_time":"2026-09-12T16:25:00+00:00","article_modified_time":"2026-10-26T11:43:44+00:00","og_image":[{"width":1200,"height":630,"url":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/10\/hero-12981-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\/pl\/wordpress-plugins-tricks-pl\/tutorials-pl-wordpress-plugins-tricks-pl\/tutorial-jak-znalezc-wolne-meta_query-i-przepisac-je-na-filtr-taksonomii\/#article","isPartOf":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/wordpress-plugins-tricks-pl\/tutorials-pl-wordpress-plugins-tricks-pl\/tutorial-jak-znalezc-wolne-meta_query-i-przepisac-je-na-filtr-taksonomii\/"},"author":{"name":"Lukas Wojcik","@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9"},"headline":"Tutorial: Jak znale\u017a\u0107 wolne meta_query i przepisa\u0107 je na filtr taksonomii","datePublished":"2026-09-12T16:25:00+00:00","dateModified":"2026-10-26T11:43:44+00:00","mainEntityOfPage":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/wordpress-plugins-tricks-pl\/tutorials-pl-wordpress-plugins-tricks-pl\/tutorial-jak-znalezc-wolne-meta_query-i-przepisac-je-na-filtr-taksonomii\/"},"wordCount":1039,"commentCount":0,"publisher":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9"},"image":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/wordpress-plugins-tricks-pl\/tutorials-pl-wordpress-plugins-tricks-pl\/tutorial-jak-znalezc-wolne-meta_query-i-przepisac-je-na-filtr-taksonomii\/#primaryimage"},"thumbnailUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/10\/hero-12981-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\/pl\/wordpress-plugins-tricks-pl\/tutorials-pl-wordpress-plugins-tricks-pl\/tutorial-jak-znalezc-wolne-meta_query-i-przepisac-je-na-filtr-taksonomii\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/wordpress-plugins-tricks-pl\/tutorials-pl-wordpress-plugins-tricks-pl\/tutorial-jak-znalezc-wolne-meta_query-i-przepisac-je-na-filtr-taksonomii\/","url":"https:\/\/www.lukaswojcik.com\/blog\/pl\/wordpress-plugins-tricks-pl\/tutorials-pl-wordpress-plugins-tricks-pl\/tutorial-jak-znalezc-wolne-meta_query-i-przepisac-je-na-filtr-taksonomii\/","name":"Tutorial: Jak znale\u017a\u0107 wolne meta_query i przepisa\u0107 je na filtr taksonomii | Lukas Wojcik","isPartOf":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/wordpress-plugins-tricks-pl\/tutorials-pl-wordpress-plugins-tricks-pl\/tutorial-jak-znalezc-wolne-meta_query-i-przepisac-je-na-filtr-taksonomii\/#primaryimage"},"image":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/wordpress-plugins-tricks-pl\/tutorials-pl-wordpress-plugins-tricks-pl\/tutorial-jak-znalezc-wolne-meta_query-i-przepisac-je-na-filtr-taksonomii\/#primaryimage"},"thumbnailUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/10\/hero-12981-meta-tax-20261024-dark.png","datePublished":"2026-09-12T16:25:00+00:00","dateModified":"2026-10-26T11:43:44+00:00","description":"Odczyt SQL budowanego przez WP_Query, pomiar przez EXPLAIN i przeniesienie filtra z wp_postmeta do taksonomii, kt\u00f3r\u0105 MySQL potrafi indeksowa\u0107.","breadcrumb":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/wordpress-plugins-tricks-pl\/tutorials-pl-wordpress-plugins-tricks-pl\/tutorial-jak-znalezc-wolne-meta_query-i-przepisac-je-na-filtr-taksonomii\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.lukaswojcik.com\/blog\/pl\/wordpress-plugins-tricks-pl\/tutorials-pl-wordpress-plugins-tricks-pl\/tutorial-jak-znalezc-wolne-meta_query-i-przepisac-je-na-filtr-taksonomii\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/wordpress-plugins-tricks-pl\/tutorials-pl-wordpress-plugins-tricks-pl\/tutorial-jak-znalezc-wolne-meta_query-i-przepisac-je-na-filtr-taksonomii\/#primaryimage","url":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/10\/hero-12981-meta-tax-20261024-dark.png","contentUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/10\/hero-12981-meta-tax-20261024-dark.png","width":1200,"height":630,"caption":"Tutorial: Jak znale\u017a\u0107 wolne meta_query i przepisa\u0107 je na filtr taksonomii"},{"@type":"BreadcrumbList","@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/wordpress-plugins-tricks-pl\/tutorials-pl-wordpress-plugins-tricks-pl\/tutorial-jak-znalezc-wolne-meta_query-i-przepisac-je-na-filtr-taksonomii\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.lukaswojcik.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Tutorial: Jak znale\u017a\u0107 wolne meta_query i przepisa\u0107 je na filtr taksonomii"}]},{"@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\/12981","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=12981"}],"version-history":[{"count":6,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts\/12981\/revisions"}],"predecessor-version":[{"id":27007,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts\/12981\/revisions\/27007"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/media\/24152"}],"wp:attachment":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/media?parent=12981"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/categories?post=12981"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/tags?post=12981"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}