# Makrók a Lekérdezéskészítőben

> A makrók alapjai és a leggyakoribb felhasználásuk a Lekérdezéskészítőben: kapcsolódó bejegyzések, kereső, szerzők, adattárak, tartalékérték és a lekérdezés alkalmazása a Listing Griden.

A makrók a dinamikus weboldal alapjai. A JetEngine a különböző moduljaihoz, például az űrlapokhoz, a kapcsolatokhoz és a Dinamikus láthatósághoz is ad makrókat. Itt a **Lekérdezéskészítő** (Query Builder) makróit nézzük meg, a leggyakoribb felhasználási esetekkel: bejegyzések megjelenítése a taxonómia archívumoldalán, keresési találatok, az aktuális bejegyzés metaértéke szerinti lekérdezés, a szerző bejegyzései a fiókoldalon és más példák. Az összes makró listáját a [Makrók útmutatója](https://hub.hellowp.io/hu/plugins/jet-engine/dinamikus-tartalom-makrok/) tartalmazza.

## A makrók alapjai

A makró egy szövegrész, amelyet a rendszer a makró céljától függő értékre cserél: olyan változó, amely a környezettől függően mást ad vissza. A `%current_id%` makró például az aktuális objektum azonosítóját adja. Egy bejegyzés oldalán ez a bejegyzés azonosítója.

Tegyük fel, hogy az aktuális bejegyzést szeretnéd megjeleníteni a lekérdezés találatai között. Mivel bejegyzéseket kérdezel le, **Bejegyzések lekérdezése** (Posts Query) típusú lekérdezést készítesz. A **Bejegyzés és oldal** fül **Post In** mezője bejegyzésazonosítót vár. Ha ide a **Current ID** makrót teszed, és egy bejegyzés nézetében előnézed az eredményt, a találatok között éppen az adott bejegyzést látod. Például a „Light Show” bejegyzés azonosítója 316; kézzel is beírhatnád a 316-ot, de a dinamikus megoldás nem kényszerít arra, hogy minden bejegyzéshez külön lekérdezést hozz létre.

A **Current ID** makrót más olyan egyedi lekérdezési mezőkben is használhatod, amelyek bejegyzésazonosítót támogatnak.

Nem minden makró egyetlen azonosítót ad vissza. Egyesek vesszővel elválasztott azonosítólistát: a **Current Terms** makró például az aktuális bejegyzés kifejezéseinek azonosítóit („2234, 2342, 4958”). Mások más típusú értéket adnak.

## Egyéni lekérdezés létrehozása

A makrók használatához előbb hozz létre egyéni lekérdezést: **JetEngine → Lekérdezéskészítő → Új hozzáadása**.

![Az új lekérdezés űrlapja a Lekérdezéskészítőben](./kepek/dinamikus-tartalom-5-lekerdezes-uj.webp)

*Az új lekérdezés űrlapja a Lekérdezéskészítőben* (https://minta-bolt.hu/wp-admin/admin.php?page=jet-engine-query&query_action=add)

A képen a **Lekérdezés típusa** lista és az alatta megjelenő, a típushoz tartozó beállítások láthatók. A típus attól függ, mit kérdezel le: bejegyzéseket a **Bejegyzések lekérdezése**, felhasználókat a **Felhasználók lekérdezése**, és így tovább (kifejezések, hozzászólások stb.). A típus azt is meghatározza, milyen objektumok lesznek a találatok.

A lekérdezés beállításainak minden mezőjénél leírás áll arról, mit kell beírni. A legtöbb mező támogatja a makrókat, de úgy használd őket, hogy a makró visszatérési értéke megfeleljen a mező céljának.

**Fontos:** a Lekérdezéskészítő mezői nem támogatják a kézzel beírt makrókat. A `%current_id%` szöveget ne gépeld be, hanem kattints a mező melletti adatbázis ikonra, és válaszd ki a **Current ID** makrót a megjelenő listából.

## Felhasználási esetek

### Az aktuális bejegyzés megjelenítése vagy kizárása

Az aktuális bejegyzés azonosítóját a **Current ID** makró adja. Segítségével csak az aktuális bejegyzést mutathatod egy olyan widgetben, blokkban vagy elemben, amely támogatja az egyéni JetEngine-lekérdezést (például egy **Map Listing** térképén).

1. Hozz létre egy **Bejegyzések lekérdezése** lekérdezést.
2. Az **Általános** fülön add meg a **Bejegyzés típusa** értékét.
3. A **Bejegyzés és oldal** fülön tedd a **Current ID** makrót a **Post In** mezőbe.

Ha az aktuális bejegyzést ki kell zárni a találatokból, a makrót a **Post Not In** mezőbe tedd.

A lekérdezés mentése után hozz létre listázási sablont ugyanahhoz a bejegyzéstípushoz, és jeleníts meg listázást az egyedi bejegyzés oldalán a **Listing Grid** elemmel. A lekérdezést a [A lekérdezés alkalmazása](#a-lekérdezés-alkalmazása) résznél leírtak szerint alkalmazd.

### Bejegyzések a taxonómia archívumoldalán

Az aktuális kifejezés szerinti lekérdezéshez a **Queried term** makrót használd: a kifejezés azonosítóját adja, és a **Taxonómiai lekérdezés** fülön alkalmazható az archívumoldalakon.

1. Hozz létre **Bejegyzések lekérdezése** lekérdezést, és az **Általános** fülön add meg a bejegyzéstípust.
2. A **Taxonómiai lekérdezés** fülön nyomd meg az **Add new** gombot egy új feltételhez.
3. Az új tételben állítsd be:
   - a szükséges **Taxonomy** (taxonómia) értéket;
   - a **Field** listában a **Term ID** értéket, mert az aktuális kifejezés azonosítóját a taxonómia kifejezéseinek azonosítóihoz hasonlítod;
   - a **Terms** mezőben a **Queried term** makrót, amely az aktuális kifejezés azonosítóját adja;
   - a **Compare** operátornál az **IN** értéket.
4. Mentsd a lekérdezést.

Ez az egyéni lekérdezés a **Listing Grid** beállításainál található **Use as Archive Template** kapcsoló helyett használható. Azt is lehetővé teszi, hogy az archívumoldalon a bejegyzéseket bejegyzéstípusonként külön válaszd: minden megjelenítendő típushoz készíts újabb lekérdezést.

### Kifejezés szerint kapcsolódó bejegyzések az egyedi oldalon

Az aktuális bejegyzés kifejezéseihez kapcsolódó bejegyzésekhez a **Current terms** makró kell. Az aktuális bejegyzéshez tartozó kifejezések azonosítóinak listáját adja.

1. Hozz létre **Bejegyzések lekérdezése** lekérdezést, és az **Általános** fülön add meg a bejegyzéstípust.
2. A **Taxonómiai lekérdezés** fülön adj hozzá új feltételt (**Add new**).
3. Állítsd be:
   - a szükséges **Taxonomy** értéket;
   - a **Field** listában a **Term ID** értéket;
   - a **Terms** mezőben a **Current terms** makrót; a beállításaiban válaszd ki ugyanazt a taxonómiát, mint az első mezőben;
   - a **Compare** operátornál az **IN** értéket.
4. Az aktuális bejegyzés kizárásához a **Bejegyzés és oldal → Post Not In** mezőbe tedd a **Current ID** makrót.
5. Mentsd a lekérdezést, hozz létre listázási sablont ugyanahhoz a bejegyzéstípushoz, és jeleníts meg listázást az egyedi oldalon a **Listing Grid** elemmel.

### Bejegyzések a keresési találatok oldalán

A **Query Variable** makróval a keresési találatok oldalán jeleníthetsz meg bejegyzéseket.

1. Hozz létre **Bejegyzések lekérdezése** lekérdezést, és az **Általános** fülön add meg a bejegyzéstípust.
2. A **Keresési kulcsszó** mezőben válaszd a **Query Variable** makrót, és a **Variable Name** értéke legyen `s`.

Ha valaki a „light” szóra keres, a lekérdezés az adott bejegyzéstípus azon bejegyzéseit adja, amelyeknek a címében, tartalmában vagy kivonatában szerepel a szó. Ezt a lekérdezést a keresési találatok archívumsablonjának **Listing Grid** elemén alkalmazva a lista a keresett kulcsszóhoz igazodik. Az egyéni lekérdezés a JetSearch bővítmény AJAX-os keresését is támogatja.

### Bejegyzések az aktuális bejegyzéssel azonos metaértékkel

A **Current meta value** makróval azokat a bejegyzéseket jelenítheted meg, amelyeknek egy bizonyos metamezőjében ugyanaz az érték van, mint az aktuális bejegyzésében.

Példa: a „Properties” (ingatlanok) egyedi bejegyzéstípusban van egy „Hot deals” (kedvezményes ajánlat) nevű **Rádió** metamező „yes” és „no” értékkel. Az egyedi ingatlanoldalon azokat a további ingatlanokat akarod megjeleníteni, amelyeknél ugyanaz az érték van kiválasztva, mint az aktuálisnál, például a „Rainforest Guest House” bejegyzésnél a „yes”. Az aktuális bejegyzést ki kell zárni a találatokból.

1. Hozz létre **Bejegyzések lekérdezése** lekérdezést, és az **Általános** fülön add meg a bejegyzéstípust („Properties”).
2. A **Meta lekérdezés** fülön adj hozzá új meta feltételt.
3. Az új tételben:
   - a **Field key/name** mezőnél kattints az adatbázis ikonra, válaszd a **JetEngine meta field** makrót, a felugró ablakban válaszd ki a metamezőt, a **Return** listában pedig a **Field name/key/ID** értéket, majd kattints az **Apply** gombra;
   - a **Compare** mezőben válaszd az **Equal (=)** értéket;
   - a **Value** mezőnél kattints az adatbázis ikonra, válaszd a **Current meta value** makrót, a felugró ablakban add meg a **Meta field key** értéket (a metamező **Name/ID** mezőjéből másolhatod), majd kattints az **Apply** gombra.
4. Az aktuális bejegyzés kizárásához a **Bejegyzés és oldal → Post Not In** mezőbe tedd a **Current ID** makrót.
5. Mentsd a lekérdezést, hozz létre listázási sablont ugyanahhoz a bejegyzéstípushoz, és jeleníts meg listázást az egyedi oldalon a **Listing Grid** elemmel.

A **Current meta value** az aktuális bejegyzés megadott metamezőjének értékét adja. A meta feltétel beállításai szerint ezt hasonlítja a többi bejegyzés ugyanazon mezőinek értékéhez, így azokat a bejegyzéseket kapod, amelyeknek ugyanaz az értéke.

### A „Posts” metamezőben kiválasztott bejegyzések

A **Current meta value as string** makróval az aktuális bejegyzés **Posts** metamezőjében kiválasztott bejegyzéseket jelenítheted meg. Ha a **Posts** mezőnél a **Multiple** beállítás be van kapcsolva, az érték tömbként mentődik; a makró szöveggé alakítja, és így a Lekérdezéskészítőben is használható.

1. Hozz létre **Bejegyzések lekérdezése** lekérdezést, és az **Általános** fülön add meg ugyanazt a bejegyzéstípust, mint a **Posts** metamező beállításainál.
2. A **Bejegyzés és oldal** fülön kattints a **Post In** mező adatbázis ikonjára, és válaszd a **Current meta value as string** makrót.
3. A felugró ablakban add meg a **Meta field key** értéket (a mező **Name/ID** mezőjéből másolhatod), kattints az **Apply** gombra, és mentsd a lekérdezést.
4. Hozz létre listázási sablont arra a bejegyzéstípusra, amelyet a **Posts** mező beállításainál kiválasztottál, és jeleníts meg listázást az egyedi oldalon a **Listing Grid** elemmel.

### A felhasználó saját bejegyzései a fiókoldalon

A **Current user ID** makróval a bejelentkezett felhasználó saját bejegyzéseit kérdezheted le.

1. Hozz létre **Bejegyzések lekérdezése** lekérdezést, és az **Általános** fülön add meg a bejegyzéstípust.
2. A lekérdezés **Szerző** fülén az **Author ID** mezőbe tedd a **Current user ID** makrót.

A makró a bejelentkezett felhasználó azonosítóját adja, ezért a lekérdezés a fiókoldalon jeleníti meg a saját bejegyzéseket. A használathoz hozz létre listázási sablont ugyanahhoz a bejegyzéstípushoz, tedd a **Listing Grid** elemet a fiókoldalra, válaszd ki a listázást, és alkalmazd a lekérdezést.

### A szerző bejegyzései a nyilvános profiloldalon

A **Queried user ID** makró a Profilkészítő moduljával létrehozott nyilvános profiloldalon megjelenített felhasználó azonosítóját adja.

1. Hozz létre **Bejegyzések lekérdezése** lekérdezést, és az **Általános** fülön add meg a bejegyzéstípust.
2. A **Szerző** fülön az **Author ID** mezőbe tedd a **Queried user ID** makrót.

A lekérdezés használatához hozz létre listázási sablont ugyanahhoz a bejegyzéstípushoz, tedd a **Listing Grid** elemet a nyilvános profiloldalhoz tartozó sablonra, válaszd ki a listázást, és alkalmazd a lekérdezést.

### Az aktuális bejegyzés szerzője

1. Hozz létre **Felhasználók lekérdezése** lekérdezést.
2. Az **Include/Exclude → Include** mezőbe tedd a **Post Author ID** makrót.

Az egyedi bejegyzésoldalon a lekérdezés a bejegyzés szerzőjét adja vissza. A használathoz hozz létre listázási sablont a felhasználóknak, tedd a **Listing Grid** elemet az egyedi bejegyzés oldalára vagy sablonjára, válaszd ki a listázást, és alkalmazd a lekérdezést.

### Az aktuális bejegyzéshez tartozó kifejezések

A **Current ID** makró **Kifejezések lekérdezése** típusú lekérdezésben az aktuális bejegyzéshez vagy termékhez kapcsolódó kifejezéseket adja.

1. Hozz létre **Kifejezések lekérdezése** lekérdezést.
2. Az **Általános** fülön add meg a szükséges **Taxonomy** értéket.
3. Az **Object/Post IDs** mezőbe tedd a **Current ID** makrót, hogy az aktuális bejegyzés azonosítóját automatikusan lekérje.

A használathoz hozz létre listázási sablont ugyanahhoz a taxonómiához, tedd a **Listing Grid** elemet az egyedi bejegyzés oldalára vagy sablonjára, válaszd ki a listázást, és alkalmazd a lekérdezést.

### Az adattárba tett bejegyzések

A **Get Store** makró az aktuális felhasználó által a megadott adattárba tett objektumok azonosítóit adja. Így megmutathatod azokat a bejegyzéseket, amelyeket a felhasználó kedvelt vagy meglátogatott, az adattár beállításaitól függően.

1. Hozz létre **Bejegyzések lekérdezése** lekérdezést, és az **Általános** fülön add meg a bejegyzéstípust.
2. A **Bejegyzés és oldal → Post In** mezőbe tedd a **Get Store** makrót, és a felugró ablakban válaszd ki az adattárat.
3. Mentsd a lekérdezést, hozz létre listázási sablont ugyanahhoz az egyedi bejegyzéstípushoz, tedd a **Listing Grid** elemet arra az oldalra, ahol az adattárba tett bejegyzések látszanak, és alkalmazd a lekérdezést.

### Az aktuális bejegyzést kedvelő felhasználók

A **Get users from store item** makró azoknak a felhasználóknak az azonosítóit adja, akik a megadott elemet az adattárba tették. Egyik felhasználási módja az aktuális bejegyzést kedvelők listája.

1. Hozz létre **Felhasználók lekérdezése** lekérdezést.
2. Az **Include/Exclude → Include** mezőbe (amely felhasználói azonosítókat vár) tedd a **Get users from store item** makrót.
3. A felugró ablakban válaszd ki az adattárat, a **Context** értéke pedig legyen **Post**.

Az egyedi bejegyzésoldalon a lekérdezés a bejegyzést az adattárba tevő felhasználókat adja. A használathoz hozz létre listázási sablont a felhasználóknak, tedd a **Listing Grid** elemet az egyedi bejegyzés oldalára, válaszd ki a listázást, és alkalmazd a lekérdezést.

## Tartalékértékek a makróknál

A legtöbb esetben az egyéni lekérdezés minden elemet visszaad, ha a makrót hibásan alkalmaztad, nem adtál meg kontextust, vagy az aktuális kiválasztáshoz nem található semmi. Hogy a lekérdezés ilyenkor nulla találatot adjon, a makróhoz **tartalékértéket** (fallback) kell megadni. A tartalékérték akkor érvényesül, ha nincs találat. Minden makrónál elérhető.

Példa: a kifejezés szerint kapcsolódó bejegyzések lekérdezését (lásd fent) használod. Van egy „Test Post” nevű új bejegyzés, amelyhez még nincs kifejezés rendelve. Az egyedi oldalán a lekérdezés nulla találat helyett az adott bejegyzéstípus összes közzétett bejegyzését adja vissza.

Ennek elkerülésére:

1. Kattints a hozzáadott makróra a felugró ablak megnyitásához, majd az **Advanced settings** (haladó beállítások) gombra.
2. Hagyd meg a **Default Object** kontextust.
3. A **Fallback** mezőbe írj be egy nem létező értéket, például egy nem létező kifejezés azonosítóját: `999999`.

Így a lekérdezés nulla találatot ad, ahogy szeretnéd.

## A lekérdezés alkalmazása

Az elkészült egyéni lekérdezést bármelyik, azt támogató widgettel használhatod. A leggyakoribb a **Listing Grid** widget. A lekérdezés alkalmazása szerkesztőnként:

### Elementor

1. Nyisd meg az oldalt vagy sablont az Elementorban, add hozzá a **Listing Grid** widgetet, és válaszd ki a korábban létrehozott listázást. Az **Általános** fülön állítsd be, amit szükséges.
2. A **Custom Query** fülön kapcsold be a **Use Custom Query** kapcsolót, és a **Custom Query** mezőben válaszd ki az imént létrehozott lekérdezést.
3. Tedd közzé az oldalt vagy sablont.

### Blokkszerkesztő (Gutenberg)

1. Nyisd meg az oldalt vagy sablont a blokkszerkesztőben, keresd meg a **Listing Grid** blokkot, és helyezd el az oldalon. Válaszd ki a listázást, majd az **Általános** fülön állítsd be, amit szükséges.
2. A **Custom Query** fülön kapcsold be a **Use Custom Query** kapcsolót, és a **Custom Query** mezőben válaszd ki a lekérdezést.
3. Tedd közzé az oldalt vagy sablont.

### Bricks

1. Nyisd meg az oldalt vagy sablont a Bricksben, keresd meg a **Listing Grid** elemet, és tedd az oldalra. Válaszd ki a listázást, majd az **Általános** fülön állítsd be, amit szükséges.
2. A **Custom Query** fülön kapcsold be a **Use Custom Query** kapcsolót, és a **Custom Query** mezőben válaszd ki a lekérdezést.
3. Mentsd az oldalt a megfelelő gombbal.

Ezután a listázás a lekérdezés találatait jeleníti meg.
