# Dinamikus láthatóság

> A Dinamikus láthatóság modul: bekapcsolás, beállítás Elementorban, blokkszerkesztőben és Bricksben, az összes feltételtípus és a rövidkódos használat.

A **Dinamikus láthatóság** modullal egyedi feltételek szerint mutathatsz vagy rejthetsz el oldalelemeket: widgeteket, blokkokat, elemeket, szekciókat és oszlopokat. A feltételek alapja lehet egy metamező értéke, felhasználói adat, a dátum és sok más. A feltételeket kombinálhatod, de nem lehetnek ellentmondásosak. A funkció az Elementor widgetbeállításaiban, a blokkszerkesztő dinamikus tartalmánál és a Bricks elembeállításaiban érhető el.

## A modul bekapcsolása

1. Nyisd meg a **JetEngine → JetEngine** vezérlőpultot, és válaszd a **Modulok** fület.
2. Az **Alapértelmezett modulok** között kapcsold be a **Dinamikus láthatóság** kapcsolót.
3. Kattints a **Mentés** gombra.

![A modulok oldala, a Dinamikus láthatóság kapcsoló bekapcsolva](./kepek/dinamikus-tartalom-1-modulok.webp)

*A modulok oldala, a Dinamikus láthatóság kapcsoló bekapcsolva* (https://minta-bolt.hu/wp-admin/admin.php?page=jet-engine)

A képen az alapértelmezett modulok láthatók; a **Dinamikus láthatóság** kapcsoló be van kapcsolva.

## Beállítás Elementorban

Az Elementor bármelyik widgetjének, szekciójának vagy konténerének **Speciális** (Advanced) fülén megtalálod a **Dinamikus láthatóság** (Dynamic Visibility) részt. A beállítások eléréséhez kapcsold be az **Enable** kapcsolót.

A szakasz három beállításból áll:

- **Visibility condition type**: „Show element if condition met” (az elem akkor látszik, ha a feltételek teljesülnek) vagy „Hide element if condition met” (az elem akkor rejtett, ha teljesülnek).
- **Conditions**: a feltételek listája. Az **+ Add Item** gombbal veszel fel új feltételt, a másolás gombbal (két papírlap ikon) duplikálhatod, a kereszttel törölheted. Egy elemhez egy vagy több feltétel tartozhat.
- **Relation**: **AND** (csak akkor érvényes, ha az összes feltétel teljesül) vagy **OR** (elég, ha bármelyik teljesül).

## Beállítás a blokkszerkesztőben

A blokk eszköztárán a „szem” ikonra kattintva nyílik meg a **Set up visibility conditions for current block** ablak.

1. Jelölj ki egy blokkot.
2. Kattints az eszköztáron a szem ikonra.
3. Kapcsold be az **Enable** kapcsolót.
4. A **VISIBILITY CONDITION TYPE** listában válaszd ki, hogy a feltételek teljesülésekor mutassa („Show element if condition met”) vagy rejtse („Hide element if condition met”) a blokkot.
5. Az **Add new item** gombbal adj hozzá egy feltételt, és a **FELTÉTEL** listából válaszd ki a típusát.

![A blokk láthatósági ablaka egy feltétellel](./kepek/dinamikus-tartalom-1-lathatosag-ablak.webp)

*A blokk láthatósági ablaka egy feltétellel* (https://minta-bolt.hu/wp-admin/post.php?post=22&action=edit)

A képen a láthatósági ablak látszik bekapcsolt **Enable** kapcsolóval és egy „A felhasználó be van jelentkezve” feltétellel.

## Beállítás Bricksben

A Dinamikus láthatóság az elem tetején a **Conditions** gombbal érhető el. A gomb megnyitja a **CONDITIONS** fület a **Select a condition** listával, amelyben a feltételek csoportjai a **POSTS**, **USER**, **DATE & TIME**, **OTHER** és **JET ENGINE**. A feltételek jelentése megegyezik az Elementor és a blokkszerkesztő feltételeivel, és a kiválasztás után ugyanazok a mezők jelennek meg.

## Feltételek

A **FELTÉTEL** (Elementorban és Bricksben **Condition**) lista szakaszokra bontható: általános, JetEngine-specifikus, felhasználói, bejegyzés-, dátum- és idő-, hierarchikus, listázási és WooCommerce-feltételek. Az alábbiakban csoportonként írjuk le őket; a megnevezések a magyar felületen látható felirataikkal szerepelnek.

### Általános feltételek

- **A lekérdezés tartalmaz elemeket** és **A lekérdezés nem tartalmaz elemeket** (Query Has Items / Query Has Not Items): a **Query to check** listából kiválasztott lekérdezés van-e találata.
- **Egyenlő**, **Nem egyenlő**, **Nagyobb, mint**, **Nagyobb vagy egyenlő**, **Kisebb, mint**, **Kisebb vagy egyenlő**: az érték összehasonlítása. Ha a feltétel teljesül, az elem megjelenik vagy elrejtődik.
- **A listában** és **Nincs a listában**: jelölőnégyzet-, választó- és rádiómezőkhöz. Az elem megjelenik vagy nem, ha a felhasználó a **Value** mezőbe írt értéket választotta.
- **Létezik** és **Nem létezik**: az elem megjelenik vagy nem, ha a kiválasztott metamező ki van töltve.
- **Tartalmaz** és **Nem tartalmazza**: a metamező tartalmazza vagy nem tartalmazza a **Value** mezőbe írt adatot.
- **Között** és **Nincs a megadott tartományban**: az érték két megadott érték között van, vagy nincs.
- **Reguláris kifejezés** és **Nem felel meg a reguláris kifejezésnek**: az érték megfelel vagy nem felel meg egy reguláris kifejezésnek.
- **Mobil eszköz** (Is mobile device): az elem csak mobil eszközön látszik.

Az egyes feltételek további mezőket nyithatnak meg:

- **Field**: a mező neve. Beírhatod, vagy a **Dinamikus címkék** gombbal választhatsz (lásd: [Dinamikus címkék](https://hub.hellowp.io/hu/plugins/jet-engine/dinamikus-tartalom-dinamikus-cimkek/)).
- **Value**: az összehasonlítandó érték vagy értékek (számok, betűk, szavak, kifejezések). Több értéket vesszővel válassz el.
- **Context**: **Default** (az aktuális bejegyzésből veszi az értéket) vagy **Current listing item object** (az aktuális listázási elem objektumából).
- **Data type**: az **Érték** mezőbe írt adat típusa. **Chars (alphabetical comparison)**: betűrendi összehasonlítás, a „b” a betűrendben a „a” után van; **Numeric**: csak egész számok; **Datetime**: dátum és idő az időrendi sorrend szerint.

### JetEngine-specifikus feltételek

- **Profiloldal**: az elem csak a felhasználó profiloldalán látszik. Kiválaszthatod azt is, melyik fiók- vagy profilaloldalon jelenjen meg.
- **Kapcsoló engedélyezve** és **Kapcsoló letiltva**: a JetEngine kapcsoló (Switcher) típusú mezőihez. Az elem akkor látszik, ha a megadott mezőben a kapcsoló be- vagy kikapcsolt.
- **Az érték be van jelölve** és **Az érték nincs bejelölve**: jelölőnégyzet (Checkbox) típusú mezőkhöz. Az elem akkor látszik, ha a megadott mező és érték be van jelölve, illetve nincs.

### Felhasználói feltételek

- **A felhasználó be van jelentkezve** és **A felhasználó nincs bejelentkezve**: az elem csak a bejelentkezett vagy csak a nem bejelentkezett felhasználónak látszik.
- **A felhasználói szerepkör** és **A felhasználói szerepkör nem**: az elem csak azoknak látszik, akiknek van (vagy nincs) a **User role** listában kiválasztott szerepköre.
- **Felhasználói azonosító (ID) egyenlő** és **Felhasználói azonosító (ID) nem egyenlő**: az elem csak azoknak látszik, akiknek az azonosítója szerepel (vagy nem szerepel) a **User IDs** mezőben.
- **A felhasználó hozzáadhat bejegyzéseket**: az elem azoknak látszik, akik közzétehetnek az adott típusú bejegyzést. A Profilkészítő beállításaiban bizonyos felhasználók kizárhatók egyes bejegyzéstípusok közzétételéből; a **Value** mezőbe a korlátozott bejegyzéstípus slugját írd.
- **User meta is**, **User has required field** és **User meta is equal to post meta (put post meta key into value)**: ezek a feltételek csak az **Egyéni láthatósági feltételek** külső modul (lásd lent) bekapcsolása után érhetők el.
  - A **User meta is** az elemet akkor mutatja, ha a felhasználó adott metamezőjében a megadott érték van. A metamezőt a felhasználókhoz metaboxszal adhatod hozzá.
  - A **User has required field** esetén a **Fields List** mezőbe írod a vizsgálandó mezőket. Lehetnek WordPress-alapmezők (például `first_name`, `last_name`, `description`, `user_nicename`) vagy metaboxszal hozzáadott mezők. A feltétel akkor teljesül, ha a felhasználónak mindegyik felsorolt mezőben van adata.
  - A **User meta is equal to post meta** akkor mutatja az elemet, ha a felhasználó és a bejegyzés metaadata megegyezik. A bejegyzés metakulcsát a **Value** mezőbe írd.

### Bejegyzésfeltételek

- **A bejegyzés ID-je megegyezik** és **A bejegyzés ID-je nem egyezik meg**: az elem csak azokon az oldalakon látszik, amelyek azonosítója szerepel (vagy nem szerepel) a **Value** mezőben. Csak a számot írd be; azonosítóját a szerkesztőoldal URL-jében, a „post=” után látod. Több azonosítót vesszővel válassz el, szóközök nélkül.
- **Az egyedi bejegyzés típusa** és **Az egyedi bejegyzés típusa nem**: a **Value** mezőbe a bejegyzéstípus slugját írd. Az elem csak az adott típusú oldalakon látszik, illetve minden másikon. A slugot a **JetEngine → Bejegyzéstípusok** lista **Post Type Slug** oszlopában találod.
- **A bejegyzéstípus archívuma megegyezik** és **A bejegyzéstípus archívuma nem egyezik meg**: a megadott slugú bejegyzéstípus archívumán látszik, illetve az összes többin.
- **Az osztályozási archívum** és **Az osztályozási archívum nem**: ugyanez taxonómiaarchívumra.
- **Keresési találati oldal** és **Nem keresési találati oldal**: az elem csak a keresési találatok oldalán, illetve mindenhol máshol látszik.
- **Az aktuális bejegyzés szerzője** és **Nem az aktuális bejegyzés szerzője**: az elem akkor látszik, ha az aktuális felhasználó a bejegyzés szerzője, illetve ha nem az.
- **A bejegyzésnek vannak kifejezései** és **A bejegyzésnek nincsenek kifejezései**: az elem látszik, ha a bejegyzéshez vannak (vagy nincsenek) hozzárendelt kifejezések.
- **A lekérdezett felhasználó bejegyzése** (Is post by queried user): csak a Profilkészítő oldalain és felhasználói listázásban használható.
- **Post Status Is** és **Is post by current user**: az **Egyéni láthatósági feltételek** külső modul bekapcsolása után érhetők el. Az első a bejegyzés állapota szerint szűr, a **Value** mezőben a kívánt állapot (például „draft”), több állapot vesszővel elválasztva. A második csak a jelenlegi felhasználó bejegyzésein mutatja az elemet, hasznos a felhasználói fiókoldalon.

#### Hierarchikus feltételek

A **Szülő bejegyzés**, **Nem szülő bejegyzés**, **Ennek a gyermekbejegyzése** és **Nem ennek a gyermekbejegyzése** feltételek olyan egyedi bejegyzéstípusoknál működnek, amelyeknél a **JetEngine → Bejegyzéstípusok** szerkesztőjében be van kapcsolva a **Hierarchical** kapcsoló. Ez teszi lehetővé szülő és gyermek bejegyzések megadását.

A szülő beállításához a bejegyzéstípus **Supports** listájában add hozzá az „Page Attributes” elemet. Ezután nyisd meg a hierarchikus bejegyzéstípus listáját, kattints valamelyik bejegyzés **Gyorsszerkesztés** hivatkozására, válaszd ki a szülő bejegyzést, és kattints a **Frissítés** gombra.

### Dátum- és időfeltételek

- **Időszak**: az elem csak a megadott időszakban látszik. A **Time From** és a **Time To** mezőbe 24 órás formátumban írd az időpontokat (például 23:00); dinamikus címkét, például egyedi mezők értékét is használhatsz.
- **A hét napjai**: az elem csak a **Days of Week** listában kiválasztott napokon látszik.

### Listázási feltételek

Listázási sablonok elemeihez használhatók. A **Páros elem** és a **Páratlan elem** feltétellel a listában felváltva jeleníthetsz meg különböző elemeket. Az **N-edik elem** feltétel az N-edik elemen látszik; ha a **Number** értéke 3, a sor harmadik elemén jelenik meg. Az **Each N Number** kapcsolóval minden harmadik elemen megjelenik. A feltételek csak a legközelebbi listázásra vonatkoznak, és beágyazott listából a szülőre, illetve fordítva nem működnek.

- **Páros elem**: az elem látszik, ha a listázási elem páros (második, negyedik, …).
- **Páratlan elem**: az elem látszik, ha a listázási elem páratlan (első, harmadik, …).

### WooCommerce-feltételek

Csak akkor érhetők el, ha a WooCommerce telepítve és aktív. Mindegyik a termék tulajdonságától függően mutatja vagy rejti az elemet:

- **Product has Enough Stock**: a készlet legalább a **Quantity** mezőbe írt mennyiség.
- **Product is Downloadable**: a termék letölthető. Példa: letölthető terméknél elrejtheted a „Szállítási információk” szakaszt.
- **Product is Featured**: a termék kiemelt. Például „Népszerű termék” jelvényhez.
- **Product is in Stock**: a készletállapot „Készleten”.
- **Product is on Backorder**: a készletállapot „Előrendelhető”. Például elrejtheted a kosárba gombot, és „Értesíts” űrlapot mutathatsz helyette.
- **Product is on Sale**: a termék akciós. Például „Spórolj 20%-ot! Az ajánlat hamarosan lejár” jelvényhez.
- **Product is Purchasable**: a terméknek van alapára.
- **Product is Purchased**: a bejelentkezett felhasználó megvásárolta a terméket. Egyedi termék sablonjában a **Product ID** mező maradjon üres, a termékeket listázó statikus oldalakon pedig töltsd ki a termékazonosítókkal. Hasznos tartalom személyre szabására, például a „Letöltés” gomb csak a digitális terméket megvásárlóknak látszik, a „Kosárba” gomb pedig az már megvásároltaknál rejtett.
- **Product is Sold Individually**: a termék „Sold individually” jelölője be van kapcsolva a készlet fülön. Például elrejtheted a mennyiségválasztót.
- **Product is Type**: a termék típusa a **Product Type** listában kiválasztott típus.
- **Product is Virtual**: a termék virtuális. Például „Nincs szállítás! A vásárlás után e-mailben kapod meg a hozzáférést” szöveg megjelenítésére.

#### A WooCommerce-feltételek használata

A feltételeket az egyedi termékoldal és a bolt oldalának sablonjain a JetWooBuilderrel készült elemekre (widget, oszlop, szakasz) is alkalmazhatod. Ehhez a **Dinamikus láthatóság** modul legyen bekapcsolva (**JetEngine → JetEngine → Modulok**, **Dinamikus láthatóság**). Nyisd meg a sablont az Elementorban (**Crocoblock → Woo Page Builder**), jelöld ki az elemet, az **Advanced** fül **Dynamic Visibility** részén kapcsold be az **Enable** kapcsolót, majd a **Conditions** fülön a listában megtalálod a WooCommerce-feltételeket.

Néhány részlet a feltételekhez:

- **Product has Enough Stock**: ha a **Quantity** értéke 5, az elem akkor látszik, ha a készlet 5 vagy több. A készletet a **Termékek → Összes termék** oldalon a termék **Készlet** fülén, a **Készletkezelés** bekapcsolása után a **Készlet mennyisége** mezőben adod meg. Példa: a „Hamarosan elfogy!” felirat **Címsor** widgetjénél a **Visibility condition type** legyen **Hide element if condition met**, a feltétel **Product has Enough Stock**, a mennyiség 5: a felirat akkor látszik, ha a készlet 5-nél kevesebb.
- **Product is Downloadable**: az elem akkor látszik, ha a termék **Letölthető** jelölője be van kapcsolva. Használhatod „Letölthető” felirathoz vagy a letöltési forrásra mutató **Dynamic Link** widgethez.
- **Product is Featured**: a termék kiemelt. Egy termék kiemeléséhez a **Termékek → Összes termék** oldalon a **Gyorsszerkesztés** után jelöld be a **Kiemelt** opciót. Például a legjobban fogyó termékeket kiemelheted, és a „Legkelendőbb!” feliratot ehhez a feltételhez kötheted.
- **Product is in Stock**: az elem akkor látszik, ha a termék készletállapota a **Készlet** fülön „Készleten”. A „Nincs készleten” felirathoz a **Hide element if condition met** típust és ezt a feltételt használd. A felirat az „Előrendelhető” állapotnál is megjelenik.
- **Product is on Backorder**: az elem akkor látszik, ha a készletállapot „Előrendelhető”. Például „Előrendelhető” felirathoz.
- **Product is on Sale**: az elem akkor látszik, ha az **Akciós ár** mező ki van töltve az **Általános** fülön. Ha ütemezted az akciós árat, az elem csak a megadott időszakban látszik. Például „Akció!” felirathoz.
- **Product is Purchasable**: azt nézi, hogy a terméknek van-e ára. A **Hide element if condition met** típussal az „Ingyenes termék” feliratot jelenítheted meg a jótékony célra felajánlott termékeknél.
- **Product is Purchased**: azt nézi, hogy az aktuális felhasználó megvásárolta-e a terméket. Csak a „Teljesített” állapotú, fizetős rendelésekre működik; az állapotot a **WooCommerce → Rendelések** oldalon láthatod.
- **Product is Sold Individually**: az elem akkor látszik, ha a **Készlet** fülön az **Egyénileg értékesített** jelölő be van kapcsolva. Például „Rendelésenként csak egy darabot vásárolhatsz” felirathoz.
- **Product is Type**: a termék típusa szerint jeleníti meg az elemet (a termékadatok listájában). Például „Külső/partnerlinkes” terméknél a terméket kínáló cég nevével.
- **Product is Virtual**: az elem akkor látszik, ha a **Virtuális** jelölő be van kapcsolva a **Készlet** fülön. Például „Virtuális termék” felirathoz.

**Példa az egyedi termékoldal sablonján:** a **Headline** widgetnek „Mindjárt elfogy” szöveget adsz, az **Advanced → Dynamic Visibility** résznél a **Visibility condition type** legyen **Hide element if condition met**, a feltétel **Product has Enough Stock**, a **Quantity** 5. Ha a termék készlete 7, a felirat rejtve marad; ha 5-nél kisebb, a felirat arra bátorítja a vásárlókat, hogy siessenek.

**Példa a bolt oldalának termékeit listázó sablonon (Archive Item):** a **Crocoblock → Woo Page Builder** oldalon kattints a **Create New Template** gombra, a **This Template For** mezőben válaszd az **Archive Item** értéket, és add meg a sablon nevét (elrendezési előbeállítást is választhatsz). Tegyél a sablonra három képet, mindegyiknél a **Visibility condition type** legyen **Show element if condition met**: az elsőnél **Product is on Sale**, a másodiknál **Product is Virtual**, a harmadiknál **Product is Featured**. A negyedik képnél a típus **Hide element if condition met**, a feltétel **Product is in Stock**. A bolt oldalának sablonjában a **Products Loop** widget **Template** mezőjében válaszd ki ezt az **Archive Item** sablont. A képek ezután csak azoknál a termékeknél jelennek meg, amelyek megfelelnek a feltételeknek.

### Példa: elem megjelenítése a hét adott napjain

A példában egy akciós szekció csak hétvégi délelőttökön látszik. A módszer widgetre, oszlopra, szekcióra, konténerre és blokkra is alkalmazható.

**Elementorban:**

1. Nyisd meg az oldalt vagy sablont, és jelöld ki a konténert, szekciót, oszlopot vagy widgetet.
2. A **Speciális** fülön nyisd meg a **Dinamikus láthatóság** részt, és kapcsold be.
3. A **Visibility condition type** listában válaszd ki, hogy a feltétel teljesülésekor mutassa vagy rejtse az elemet.
4. A **Conditions** listában a feltételek között görgess le a **Date & Time** csoportig, és válaszd a **Days of week** (a hét napjai) feltételt. Jelöld ki azokat a napokat, amikor az elemnek látszania kell, vagy el kell tűnnie.
5. Ha időszakra is szűkítenél, kattints az **Add Item** gombra, és a **Date & Time** csoportból válaszd az **Időszak** (Time Period) feltételt. A **Time From** és **Time To** mezőbe 24 órás formátumban írd az időpontokat. Megadhatsz csak kezdő vagy csak záró időpontot is.
6. A **Relation** legyen **AND**: így csak akkor teljesül a láthatósági szabály, ha a nap és az időszak is egyezik a jelenlegi idővel.
7. Frissítsd az oldalt, és ellenőrizd a frontenden.

**A blokkszerkesztőben:**

1. Jelöld ki a blokkot, és kattints az eszköztár szem ikonjára.
2. A megnyíló ablakban kapcsold be az **Enable** kapcsolót, és válaszd ki a **VISIBILITY CONDITION TYPE** értékét.
3. A feltételek listájában a **Date & Time** csoportból válaszd a **Days of week** feltételt, és add meg a napot.
4. Több nap esetén minden naphoz külön feltételt vegyél fel, és állítsd a **Relation** értékét **OR**-ra: így elég, ha legalább egy feltétel igaz.
5. Időszakhoz add hozzá az **Add new item** gombbal az **Időszak** feltételt, és add meg a **Time From** és **Time To** értékét. A **Relation** legyen **AND**.
6. Frissítsd az oldalt, és nézd meg a frontenden.

### Példa: elem megjelenítése az URL paramétere szerint

Az URL lekérdezési paramétere (például `?status=success`) alapján is dönthetsz a láthatóságról. A példában egy foglalási űrlap beküldése után egy üzenet jelenik meg, az űrlap pedig eltűnik. Az űrlap beküldési típusa legyen **Page Reload**, hogy a beküldés után az URL megváltozzon, benne a `status` paraméterrel (sikeres beküldésnél `success`, sikertelennél `failed`). Szükséges hozzá a JetFormBuilder és a JetAppointment.

1. Kapcsold be a **Dinamikus láthatóság** modult a **JetEngine → JetEngine → Modulok** oldalon, és kattints a **Mentés** gombra.
2. Add hozzá az oldalhoz az űrlapot, és nézd meg az URL-t beküldés után, sikeres és sikertelen esetben is.
3. Vegyél fel egy új szekciót azzal az üzenettel, amelyet csak sikeres beküldés után szeretnél megmutatni. A **Speciális** fülön kapcsold be a **Dinamikus láthatóságot**.
4. A feltétel típusa legyen **Show element if condition met**, a feltétel pedig **Egyenlő**.
5. A **Field** mezőnél válaszd a **Macros** lehetőséget, majd a **Query Variable** makrót. A **Variable Name** értéke `status` legyen, a **Value** mezőbe pedig `success` kerüljön.
6. A sikertelen beküldéshez adj hozzá egy másik szekciót ugyanezekkel a beállításokkal, csak a **Value** legyen `failed`.
7. Az űrlap elrejtéséhez nyisd meg az űrlap widgetjének **Speciális** beállításait, kapcsold be a **Dinamikus láthatóságot**, és válaszd a **Hide element if condition met** típust. Két feltételt vegyél fel (az egyiknek `success`, a másiknak `failed` az értéke), és a **Relation** legyen **OR**.

A blokkszerkesztőben ugyanez működik, például keresési találati oldal sablonjában. Hozz létre keresési archívumsablont (a feltételek: „Include”, „Archive”, „Search Results”), és vegyél fel egy blokkot. Kattints a szem ikonra, kapcsold be az **Enable** kapcsolót, a típus legyen **Show element if condition met**, a feltétel **Equal**. A **Field** mezőnél kattints a **Dinamikus címke** gombra, a **Source** értéke legyen **Custom Data**, az adat a **Query Variable**, a változó neve `s` (ez a keresett szó). Az **Apply** gomb után a **Value** mezőbe írd a keresett szót (például `fotó`). Az elrejtéshez használd a **Hide element if condition met** típust, ugyanezzel a mezőbeállítással, és másik értékkel (például `esküvő`). A keresett szónak megfelelő oldalon a blokk megjelenik, másik keresésnél eltűnik.

## Külső modul: Egyéni láthatósági feltételek

A **User meta is**, **User has required field** és **User meta is equal to post meta** feltétel, valamint a **Post Status Is** és az **Is post by current user** feltétel a **JetEngine → Modulok → Külső modulok** fülön az **Egyéni láthatósági feltételek** kapcsoló bekapcsolása után jelennek meg. A modul külön kiegészítő bővítményként települ.

![A modulok oldala, lent a Külső modulok között az Egyéni láthatósági feltételek kapcsoló](./kepek/dinamikus-tartalom-3-galeria-modulok.webp)

*A modulok oldala, lent a Külső modulok között az Egyéni láthatósági feltételek kapcsoló* (https://minta-bolt.hu/wp-admin/admin.php?page=jet-engine)

A képen az **Egyéni láthatósági feltételek** kapcsoló a **Külső modulok** szakaszban látható, kikapcsolt állapotban.

Ha a modult a bővítmény frissítése nem hozta, külön kiegészítőként is telepítheted: a **Bővítmények → Új hozzáadása → Bővítmény feltöltése** oldalon töltsd fel a kiegészítő zip-fájlját, majd kapcsold be a JetEngine vezérlőpultján. A bekapcsolás után a **Speciális → Dinamikus láthatóság** részben a **Posts** csoportban két új feltétel jelenik meg. Ezek csak az egyedi bejegyzés (Single) sablonjában működnek.

- **Post Status Is**: az elem a megadott állapotú bejegyzés oldalán látszik vagy rejtett. A **Value** mezőbe egy vagy több állapotnevet írj: lehet WordPress-alapállapot (közzétett, vázlat, jóváhagyásra vár) vagy bármely más telepített állapot. Példa: a felhasználó új bejegyzést hoz létre, amelynek állapota „Draft”, és az egyedi sablonon egy szalag értesíti, hogy az adminisztrátor még nem hagyta jóvá. A bejegyzés közzétételekor a szalag eltűnik.
- **Is post by current user**: az elem a bejegyzés szerzőjének látszik vagy rejtett. Példa: a szerzőnek köszönő kép vagy megjegyzés jelenik meg. Ha kijelentkezel, vagy másik felhasználóként nézed az oldalt, a kép nem látszik.

### Példa: rövidkód Bricksben, feltételes hivatkozással

A **JetEngine Condition** rövidkód Bricksben is használható. A példában egy „Városi túrák” bejegyzéstípus bejegyzései kapnak „Kupon” szövegmezőt (QR-kódként megjelenítve) és „Napok” számmezőt. A háromnál hosszabb túrákhoz kedvezmény jár, és a látogató egy hivatkozással jut a kedvezményt bemutató oldalra. Szükséges hozzá a Bricks téma, a bekapcsolt **Dinamikus láthatóság** modul és egy egyedi bejegyzéstípus.

1. Nyisd meg a **JetEngine → Lekérdezéskészítő** oldalt, kattints az **Új hozzáadása** gombra, és add meg a lekérdezés nevét. A **Query Type** maradjon **Posts Query**, a **Post Type** listában válaszd ki a túrák bejegyzéstípusát.
2. Nyisd meg a **Meta Query** fület, és az **Add new clause** gombbal vegyél fel feltételt. A **Field key/name** mezőnél a **Dinamikus címke** gombbal válaszd a „JetEngine meta field” elemet, a **Field** listában a „Kupon” mezőt, a **Return field** értéke legyen **Field name/key/ID**, majd **Apply**.
3. Az **Operator** legyen „Greater or equal (>=)”, a **Value** `1`, a **Type** **Char**. Add meg a feltétel nevét, és kattints az **Add/Update Query** gombra.
4. A **JetEngine → Listázások/komponensek** oldalon hozz létre Bricks nézetű listázási elemet. A „Kupon” mező megjelenítéséhez tegyél rá **Dynamic Field** elemet, a **Source** legyen „Media Data”, válaszd ki a mezőt, kapcsold be a **Filter field output** kapcsolót, és a **Callback** listában válaszd a **QR Code** elemet. Mentsd el.
5. Hozz létre egy oldalt („Kedvezmények”), és a **Listing Grid** elemmel jelenítsd meg rajta a túrák listáját.
6. Nyisd meg a **JetEngine → JetEngine → Shortcode-generátor** oldalt. A **Shortcode** lista értéke legyen „JetEngine Condition”, a **Tag Enclosing Type** legyen „Enclosing”, a **Condition** lista „Show element if condition met”, a feltétel **Greater than**. A **Field** mezőbe írd a „Napok” mező nevét (`days`), a **Value** mezőbe a `3` értéket, az adattípus legyen **Numeric**. A kapott rövidkód:

```
[jet_engine_condition jedv_condition="greater-than" jedv_field="days" jedv_value="3" jedv_data_type="numeric"]Add your content here...[/jet_engine_condition]
```

7. Hozz létre egy másik Bricks listázási elemet, és tegyél rá egy **Shortcode** elemet. A rövidkódban az „Add your content here...” szöveg helyére írd be a hivatkozás HTML-kódját a kedvezményoldal címével és a felirattal (például „Szerezd meg a kedvezményt!”):

```
[jet_engine_condition jedv_condition="greater-than" jedv_field="days" jedv_value="3" jedv_data_type="numeric"]<a href="https://pelda.hu/kedvezmeny/" target="_blank">Szerezd meg a kedvezményt!</a>[/jet_engine_condition]
```

8. Mentsd a listázási elemet. Hozz létre egy új oldalt, és a **Listing Grid** elemmel jelenítsd meg ezt a listázást.
9. Mivel a háromnapos vagy rövidebb túráknál a feltétel nem teljesül, a **Shortcode** elem üres marad. Az üres elemek elrejtéséhez nyisd meg az **ELEMENT VISIBILITY** beállításokat, és a **Hide element if** mezőben válaszd a „Query is empty” elemet.
10. Mentsd az oldalt, és nézd meg a frontenden: a háromnál hosszabb túráknál megjelenik a hivatkozás, amelyre kattintva a látogató a kedvezményoldalra jut.

## Dinamikus láthatóság rövidkóddal

A rövidkóddal widgetekre, blokkokra és elemekre is alkalmazhatsz láthatósági feltételt az Elementorban, a blokkszerkesztőben és a Bricksben. A beállítások a **JetEngine → JetEngine vezérlőpult → Shortcode-generátor** oldalon vannak, a feltétel pedig megegyezik a fent leírt feltételekkel.

- **Shortcode**: válaszd a „JetEngine Condition” elemet.
- **Tag Enclosing Type**:
  - **Enclosing** (például `[shortcode attrs]tartalom[/shortcode]`): igaz vagy hamis értéket ad a feltétel szerint. Elementorban használható. Ekkor megjelenik a **Visibility Condition Type**, amelyben a „Show element if condition met” és a „Hide element if condition met” közül választasz.
  - **Selfclosing** (például `[shortcode attrs]`): ha a feltétel teljesül, a rövidkód címkéi közé tett tartalmat adja vissza. Bricksben használható.
- **Condition**: ugyanazok a feltételek, mint fent.

A rövidkódgenerátorról bővebben a [Shortcode- és makrógenerátor](https://hub.hellowp.io/hu/plugins/jet-engine/generatorok/) fejezetben olvashatsz.

![A Shortcode-generátor a JetEngine Condition rövidkóddal, „Nagyobb, mint” feltétellel](./kepek/dinamikus-tartalom-2-shortcode-feltetel.webp)

*A Shortcode-generátor a JetEngine Condition rövidkóddal, „Nagyobb, mint” feltétellel* (https://minta-bolt.hu/wp-admin/admin.php?page=jet-engine)

A képen a **JetEngine Condition** rövidkód a „Körülzáró” változattal, a **Nagyobb, mint** feltétellel, a `_pricing` mezővel és az 1500 értékkel látszik. Alul a generált rövidkód van.

### Példa: „VIP ajánlat” felirat drága túráknál

A példa egy túraoldalon azt mutatja, hogyan jelenjen meg egy szöveg csak akkor, ha a túra ára meghaladja az 1500-at.

1. Nyisd meg a **JetEngine → JetEngine → Shortcode-generátor** oldalt.
2. A **Rövidkód** listában válaszd a „JetEngine Condition” elemet.
3. A **Körülzáró címke típusa** legyen „Enclosing”, hogy a rövidkód közé szöveget tehess.
4. A **Láthatósági feltétel típusa** maradjon „Show element if condition met”.
5. A **Feltétel** listában válaszd a **Nagyobb, mint** elemet.
6. A **Mező** mezőbe írd a metamező nevét (példa: `_pricing`), az **Érték** mezőbe az összehasonlítandó számot (1500).
7. A **Kontextus** és az **Adattípus** maradjon alapértelmezett, és másold ki a rövidkódot.

A kimásolt rövidkód (a tartalmat átírva) például:

```
[jet_engine_condition jedv_condition="greater-than" jedv_field="_pricing" jedv_value="1500"]VIP ajánlat[/jet_engine_condition]
```

**Elementorban:**

1. Nyisd meg a **JetEngine → Listázások/komponensek** oldalt, kattints az **Új elem hozzáadása** gombra, hagyd az alapértelmezett „Bejegyzések” forrást, a **From post type** listában válaszd a túrák bejegyzéstípusát, add meg a sablon nevét, és hagyd az „Elementor” nézetet. Kattints a **Create Listing Item** gombra.
2. Tedd a sablonra a szükséges dinamikus elemeket (**Dynamic Link**, **Dynamic Image**, **Dynamic Field**).
3. Add hozzá a **Shortcode** widgetet, és az **Enter shortcode** mezőbe illeszd be a rövidkódot, a szöveget cseréld a sajátodra.
4. Tedd közzé a sablont, majd egy oldalon a **Listing Grid** widgettel jelenítsd meg a listázást.

**A blokkszerkesztőben** ugyanez a menet: a **Listing View** legyen „Blocks (Gutenberg)”, és a rövidkódot a **Shortcode** blokkba másold. A listázási elemet a **Listing Grid** blokkal helyezd az oldalra.

**Bricksben** az önlezáró (**Selfclosing**) változatot használd:

1. A Shortcode-generátorban válaszd a **Selfclosing** típust, a **Nagyobb, mint** feltételt, a `_pricing` mezőt és az 1500 értéket, majd másold ki a rövidkódot.
2. Hozz létre Bricks nézetű listázási elemet, és tedd rá a dinamikus elemeket.
3. Adj hozzá egy **Heading** elemet „VIP ajánlat” szöveggel, jelöld ki, és kattints a **Conditions** gombra, majd a plusz jelre.
4. A **Select condition** listában a **JET ENGINE** csoportban válaszd a „Dynamic Visibility” elemet, a **Compare** mezőben a „Condition is met” elemet, a **Value** mezőbe pedig illeszd be a rövidkódot.
5. Mentsd az oldalt, és tedd a listázást az oldalra.

A weboldalon a „VIP ajánlat” felirat csak azoknál az elemeknél látszik, ahol a feltétel teljesül.

## Lekérdezési eredmények számának használata

A **Query Results Count** (lekérdezési eredmények száma) dinamikus címke megmutatja a lekérdezés összes találatát és az éppen látható találatok számát. A Dinamikus láthatósággal együtt például akkor mutathatsz egy elemet, ha egy lapozott listában az utolsó oldalon vagy.

A példában 33 bejegyzés van, oldalanként öt jelenik meg, így az utolsó oldalon három. Az utolsó oldalon a **Social Icons** widget jelenjen meg a Listing Grid és a lapozó alatt (Elementor).

1. Jelöld ki a **Social Icons** widgetet, és a **Speciális** fülön nyisd meg a **Dynamic Visibility** részt, kapcsold be.
2. A feltétel típusa legyen „Show element if condition met”.
3. A **Condition** fülön válaszd a „Kisebb, mint” feltételt.
4. A **Field** mezőnél kattints a **Dinamikus címkék** gombra, és válaszd a **Query Results Count** címkét.
5. A megjelenő beállításoknál válaszd ki a lapozott lekérdezést, a **Returned Count** pedig legyen „Currently visible query results count (per page)”.
6. A **Value** mezőbe írd be a számot (példa: 5). Ha az oldalon látható találatok száma ennél kevesebb, a widget megjelenik.
7. Az **Adattípus** legyen „Numeric”.

A lapozó **Pagination Content** beállításainál az **Apply type** legyen „Page Reload”, hogy a láthatóság az oldal újratöltése után számítódjon. Mentés után az első oldalon, ahol öt bejegyzés van, nincs ikon, az utolsó oldalon, ahol három, megjelenik.
