# A Query Builder öt gyakori hibája és javításuk

> Üres űrlaplista, nem működő taxonómiaszűrő, meta-klózok rendezése, Current WP Query archív oldalon és lekérdezési változók REST API-n.

Ez a fejezet azt mutatja meg, hogyan használd helyesen a Query Buildert listázásokkal és szűrőkkel, ha bejegyzéseket vagy egyéni bejegyzéstípusokat jelenítesz meg, szűrsz taxonómia szerint, vagy lapozást használsz.

## 1. A lekérdezés nem adja vissza a kívánt elemeket egy űrlapban

A hiba akkor jön elő, ha a JetFormBuilder **Select**, **Radio** vagy **Checkbox** mezőjének beállításai nem egyeznek a lekérdezéssel.

**A lekérdezés:**

1. Hozz létre egy **Posts Query** típusú lekérdezést, a neve legyen például „List for Posts”.
2. A **General** fülön válaszd a **Posts** bejegyzéstípust és a **Published (publish)** állapotot.
3. A **Pagination** fül **Posts per Page** mezőjében korlátozhatod a megjelenített elemek számát.
4. Mentsd a lekérdezést.

**Az űrlap:**

1. Készíts új űrlapot, és töröld az alapból megjelenő **Hidden** és **Text** mezőket.
2. Vegyél fel egy **Radio** mezőt.
3. A **FILL OPTIONS FROM** értéke legyen **Generate Dynamically**, a **GENERATOR FUNCTION** pedig **Get values list from JetEngine list options**.
4. A **QUERY ID** mezőben válaszd ki az előbb mentett lekérdezést, az **OPTION VALUE** mezőbe pedig írd be: `post_name`, hogy a bejegyzések nevei jelenjenek meg.
5. Add hozzá az űrlapot egy oldalhoz, és nézd meg a frontenden: a bejegyzések listája látszik a rádiógomboknál.

## 2. A taxonómiaszűrő nem működik

A hiba oka többnyire az, hogy összekeverik az igazi **Query ID**-t és a **Custom Query ID** értéket. A szűrőknél ez a különbség lényeges.

Példa: vannak bejegyzéseid két kategóriával és egy egyéni bejegyzéstípusod három kategóriával, két különböző Listing Griddel jeleníted meg őket. Ha nem a megfelelő Custom Query ID-t használod, a szűrés után a két lista ugyanazokat az értékeket mutathatja, vagy üres találatot kapsz.

1. Készíts egy **Posts Query** lekérdezést a bejegyzésekre, és a **Custom Query ID** mezőbe írj egyedi azonosítót, például `filter_for_posts`.
2. Készíts egy **Select** szűrőt a kategóriák szerinti szűréshez: az adatforrás legyen **Taxonomies**, a taxonómia **Categories**.
3. Hozz létre két listázást (a bejegyzésekhez és az egyéni bejegyzéstípushoz), és tedd mindkettőt az oldalra. Add az oldalhoz a **Select Filter** widgetet, és válaszd ki benne a szűrőt.
4. A widgetnél a **This filter for** értéke legyen **JetEngine**, az **Apply type** **AJAX** vagy **Mixed**, az **Apply on** pedig **Value change**. A **Query ID** mezőbe írd be a lekérdezés Custom Query ID értékét (itt `filter_for_posts`).
5. A szűrendő Listing Grid widget **Advanced** fülén a **CSS ID** mezőbe írd be ugyanezt az azonosítót.
6. Tedd közzé az oldalt, és próbáld ki a frontenden.

## 3. Rendezés és szűrés meta-klózzal (Query Class Name)

A **Query Class Name** egy belső érték, amely megmondja a rendszernek, melyik metaszabályt kövesse. Akkor hasznos, ha metadobozzal felvett adatok alapján szűrsz és rendezel.

Példa: a bejegyzéseknek van egy „Rating” metamezőjük, és csak a 3-nál nagyobb értékűeket akarod, értékelés szerint rendezve.

1. Nyisd meg a lekérdezés **Meta Query** fülét, és kattints az **Add new clause** gombra.
2. A **Field key/name** mezőbe írd: `rating`. A **Compare** operátor legyen **Greater than (>)**, a **Value to compare** `3`, a **Type** **Numeric**.
3. A **Create name** mezőbe írd a klóz nevét, például „Rating Clause”.
4. A **General** fül **Order & Order By** részén kattints az **Add new sorting parameter** gombra. Az **Order By** legyen **Order by meta clause**, válaszd ki az előbb létrehozott klózt, és állítsd be a sorrendet.

## 4. A Current WP Query archív oldalon

A **Current WP Query** típussal az archív oldalakon jeleníthetsz meg bejegyzéseket úgy, hogy a lekérdezés a hely szerint változik. Így nem kell minden kategóriaoldalhoz külön lekérdezés.

1. Hozz létre új lekérdezést, adj neki nevet, a **Query Type** legyen **Current WP Query**.
2. A megjelenő **Current WP Query** részben kattints az **Add new page type** gombra. A **Page Type** legyen **Categories**, a **Posts number** mezőbe írd a megjelenítendő elemek számát.
3. Add hozzá ugyanígy a **Post** oldaltípust is a saját elemszámával.
4. Mentsd a lekérdezést az **Add/Update Query** gombbal.
5. Hozz létre egy archív sablont (ehhez a JetThemeCore bővítmény kell), tedd bele a **Listing Grid** widgetet, és válaszd ki a bejegyzések listázási sablonját.
6. A **Custom Query** részben kapcsold be a **Use Custom Query** kapcsolót, és a legördülő listából válaszd ki a lekérdezést.

Az archív oldal így mindig az aktuális kategória bejegyzéseit mutatja. Ha a **Bejegyzések → Kategóriák** oldalon a kívánt kategória alatti **Megtekintés** linkre kattintasz, az ahhoz tartozó bejegyzéseket látod.

## 5. Lekérdezési argumentumok és változók REST API-n keresztül

A lekérdezési változók a WordPress-lekérdezések viselkedését módosító paraméterek. Ha például a mobilon megjelenő elemek számát korlátozod, külső alkalmazás ezt nem tudja átállítani. A lekérdezési változók ezt lehetővé teszik.

Példa: a **Pagination** beállításban változóval adod meg az elemszámot.

1. A korábban létrehozott lekérdezésnél kapcsold be a **Register Rest API Endpoint** kapcsolót.
2. Add meg a **QUERY ARGUMENT NAME** értékét (például `posts-count`) és a **DEFAULT VALUE** értékét (például `2`).
3. A **Pagination** részben a **Posts Per Page** mező melletti **Dynamic Tag** ikonra kattintva válaszd a **Query Variable** lehetőséget, és a **Variable Name** mezőbe írd: `posts-count`.
4. Kattints az **Apply**, majd az **Update Query** gombra.
5. A működést kipróbálhatod: másold ki a lekérdezésnél megjelenő, lekérdezési argumentumokat tartalmazó REST API-végpont példa-URL-jét, és nyisd meg a böngészőben. Az adatok rendezetlenül jelennek meg, a **Pretty-print** linkre kattintva viszont látod, hogy csak két bejegyzés szerepel az eredményben.

## Gyakori kérdések

**Használhatom ugyanazt a lekérdezést több oldalon?** Igen. A Query Builder egyik fő előnye az újrahasznosíthatóság: egy lekérdezés több Listing Gridet vagy widgetet is kiszolgálhat, így a szűrési logika egységes marad.

**Gyorsítja a Query Builder az oldalt?** Önmagában nem, de a jól megírt lekérdezések kevesebb felesleges adatbázis-műveletet jelentenek. A jól megírt lekérdezés, a lapozás és a gyorsítótár együtt javíthatja a betöltési időt.

**Lekérdezhetek felhasználókat, kifejezéseket és hozzászólásokat?** Igen. A Query Builder több típust támogat: bejegyzések, felhasználók, kifejezések, hozzászólások, SQL, REST API és egyéni lekérdezés.

**Jobb a Query Builder, mint az Elementor beépített lekérdezése?** Rugalmasabb: összetett szűrést, több forrást, újrahasznosítható lekérdezéseket, SQL-t és REST API-kérést is tud.

**Működik az egyéni tartalomtípusokkal (CCT)?** Igen. CCT-elemekre közvetlenül készíthetsz lekérdezést, anélkül hogy bejegyzéssé kellene alakítanod őket.
