# Dinamikus adatok

> A dinamikus adatcímkék használata: beszúrás, WordPress-mezők, egyéni mezők, dátumok, szűrők és kulcs-érték argumentumok.

A dinamikus adatokkal a WordPress adatbázisában tárolt értékeket jelenítheted meg a Bricksben: kiemelt kép, bejegyzés címe, dátum, szerző neve, kategóriák, címkék, az oldal címe vagy bármelyik egyéni mező. Leggyakrabban sablonok készítésekor használod őket, például a bejegyzés sablonban vagy egy egyedi bejegyzéstípus (például ingatlanhirdetés) egyoldalas sablonjában.

A dinamikus adat egy **címkével** (tag) adható meg kapcsos zárójelben, például `{post_title}`. Megjelenítéskor a Bricks a címke helyére az aktuális értéket írja.

## Dinamikus adat beszúrása

Szöveges beállításban a `{` karakter begépelésére megjelenik a dinamikus adatok választója. A beállítás melletti villám ikonra kattintva ugyanezt a listát nyitod meg.

Nem szöveges beállításoknál (kép, videó és hasonlók) a beállításpanelen a dinamikus adatok legördülő menüből választasz.

Az összes címke elérhető minden olyan elemben, amely támogatja a dinamikus adatot. Egy galéria típusú egyéni mező (például egy ACF-galéria) szövegelembe is beszúrható: ilyenkor `img` címkék sorozataként jelenik meg (az `:image` szűrővel).

![Egy lekérdezési ciklus a Bricks szerkesztőben, amelynek elemei dinamikus adatot használnak](./kepek/dinamikus-tartalom-ciklus-bekapcsolva.webp)

*Egy lekérdezési ciklus a Bricks szerkesztőben, amelynek elemei dinamikus adatot használnak* (https://minta-bolt.hu/lekerdezes-teszt/?bricks=run)

A képen egy blokk látszik, amelyben a **Címsor** és az **Egyszerű szöveg** elem dinamikus címkét tartalmaz (`{post_title:link}` és `{post_excerpt:15}`).

## Egyéni mezők bővítményei

A Bricks nem csak a WordPress alapadataival dolgozik. Ezeket az egyéni mező bővítményeket támogatja:

- Advanced Custom Fields (ACF és ACF Pro)
- Meta Box
- Crocoblock JetEngine
- Pods
- CMB2
- Toolset

Így a legbonyolultabb egyedi bejegyzéstípus-elrendezések és adatigények is megoldhatók sablonnal.

### Advanced Custom Fields

A Bricks az összes ACF és ACF Pro mezővel együttműködik, a Flexible Content és a beágyazott csoportok is beleértve. A mezők a szerkesztő dinamikus adat legördülő menüjében jelennek meg.

- A **Relationship** mező (a kétirányú kapcsolat is) és a **Repeater** mező a lekérdezési ciklus építőben is elérhető. Végig tudsz menni a mezők tartalmán, és az alsó szintű mezőket dinamikus adatként jelenítheted meg.
- Az ACF **True / False** mezője az elemfeltételeknél hasznos. Alapból a lefordított „True / False” felirat jön vissza, ezért feltételben használd a `:value` szűrőt. A hamis ellenőrzéséhez a `== 0`, az igazhoz a `== 1` összehasonlítás kell.
- A `{acf_get_row_layout}` címke az ACF Flexible tartalom aktuális elrendezésének nevét adja vissza, ami az elemfeltételekkel jól használható.

### Meta Box

A Bricks kompatibilis a Meta Box bejegyzéstípusaival, taxonómiáival, egyéni mezőivel és kapcsolataival. Az egyéni mezők a dinamikus adat legördülő menüben jelennek meg, és a tartalmuk szerint töltődnek be a frontenden. A (többszörözhető) **Group** mező és a kapcsolatok a lekérdezési ciklus építőben is elérhetők, az alsó szintű mezők dinamikus adatként megjeleníthetők. A nem többszörözhető, beágyazott Group mezők építése is lehetséges a lekérdezési ciklusban.

### Crocoblock JetEngine

A Bricks kompatibilis a JetEngine bejegyzéstípusaival, meta dobozaival (egyéni mezők), taxonómiáival, kapcsolataival és beállítási oldalaival. Az egyéni mezők dinamikus adatként érhetők el a szerkesztőben, a kapcsolatok és az ismétlők pedig a lekérdezési ciklust is táplálhatják. Az egyedi tartalomtípusok (CCT) támogatását a JetEngine adja, nem a Bricks, ezért ezekkel kapcsolatos kérdéssel a JetEngine ügyfélszolgálatához fordulj.

A JetEngine meta dobozok mezői is megjelennek, ha a forrásuk WooCommerce termékadat vagy WooCommerce termékváltozat. A Bricks mindegyik forrásnak külön előtagot ad:

| Forrás | Címke |
|---|---|
| WooCommerce termékadat | `{je_woo_product_<mezőnév>}` |
| WooCommerce termékváltozat | `{je_woo_product_variation_<mezőnév>}` |
| A Termék bejegyzéstípushoz rendelt bejegyzésmezők | `{je_product_<mezőnév>}` |

Ha például a termékadat mezőjének neve `delivery_note`, a címke `{je_woo_product_delivery_note}`. Egy azonos nevű, rendes termék-bejegyzésmező címkéje `{je_product_delivery_note}`. Az eltérő előtagok megakadályozzák, hogy a két mező ugyanazt a címkét regisztrálja.

## Alap WordPress-adatok

Alapból ezek a címkék használhatók.

### Bejegyzésmezők

Bejegyzésekhez és egyedi bejegyzéstípusokhoz kapcsolódnak.

| Címke | Mit ad vissza |
|---|---|
| `{post_title}` | a bejegyzés címe |
| `{post_id}` | a bejegyzés azonosítója |
| `{post_url}` | a bejegyzés hivatkozása |
| `{post_slug}` | a bejegyzés slugja |
| `{post_type}` | a bejegyzés típusa |
| `{post_date}` | a közzététel dátuma |
| `{post_modified}` | a módosítás dátuma |
| `{post_time}` | a közzététel időpontja |
| `{post_comments_count}` | a hozzászólások száma |
| `{post_content}` | a bejegyzés tartalma (blokkszerkesztő) |
| `{post_excerpt}` | a bejegyzés kivonata |
| `{read_more}` | a bejegyzésre mutató hivatkozás „Read more” felirattal |
| `{featured_image}` | a kiemelt képet tartalmazó kép címke |

Ezek a mezők támogatják a szűrőket:

| Példa | Hatás |
|---|---|
| `{post_title:link}` | a cím a bejegyzésre mutató hivatkozásként jelenik meg |
| `{post_title:link:3}` | ugyanez, de a cím 3 szóra rövidítve |
| `{post_title:link:newTab}` | a hivatkozás új lapon nyílik |
| `{post_date:human_time_diff}` | a dátumkülönbség emberi formában („1 hour”, „5 mins”, „2 days”) |
| `{post_excerpt:55}` | a kivonat 55 szóra korlátozva (a kettőspont utáni szám a szavak száma) |
| `{post_excerpt:format:10}` | a HTML-formázás megmarad, a kivonat 10 szóra korlátozva |
| `{featured_image:medium_large}` | a kiemelt kép `medium_large` méretben (alapból bélyegkép méret) |
| `{featured_image:large:link}` | a kiemelt kép `large` méretben, a bejegyzésre mutató hivatkozásba csomagolva |

### Taxonómiák

Ezek a címkék a bejegyzéshez rendelt kifejezések listáját adják, és mindegyik kifejezés a saját archívumára mutat:

- `{post_terms_category}`
- `{post_terms_post_tag}`
- `{post_terms_my_taxonomy_slug}`: a `my_taxonomy_slug` helyére a használni kívánt taxonómia slugja kerül.
- `{post_terms_category:plain}`: a `:plain` szűrő eltávolítja a hivatkozásokat.

Ha az elem körül már van hivatkozás, a kifejezések hivatkozásait a `bricks/dynamic_data/post_terms_links` szűrővel kapcsolhatod ki.

### Kifejezések (termek)

| Címke | Mit ad vissza |
|---|---|
| `{term_id}` | a kifejezés azonosítója |
| `{term_name}` | a kifejezés neve |
| `{term_slug}` | a kifejezés slugja |
| `{term_count}` | a kifejezéshez tartozó bejegyzések száma |
| `{term_taxonomy_slug}` | a kifejezés taxonómiájának slugja |
| `{term_parent}` | a szülő kifejezés neve (üres, ha nincs szülő) |
| `{term_children}` | a közvetlen gyermek kifejezések nevei vesszővel elválasztva (csak a közvetlen gyerekek, az üres kifejezések is szerepelnek) |
| `{term_url}` | a kifejezés archívumának hivatkozása |
| `{term_description}` | a kifejezés leírása |
| `{term_meta:my_term_meta_key}` | a `my_term_meta_key` kifejezésmeta értéke |

A `{term_parent}` és a `{term_children}` címkéhez három szűrő használható: a `:value` azonosítókat, a `:slug` slugokat, a `:link` hivatkozott neveket ad vissza. Elemfeltételben a `{term_children:value}` nem üres voltával például csak a szülő kifejezéseknél jeleníthetsz meg egy elemet.

### Szerzőmezők

| Címke | Mit ad vissza |
|---|---|
| `{author_id}` | a szerző azonosítója |
| `{author_name}` | a szerző neve |
| `{author_bio}` | a szerző bemutatkozása |
| `{author_email}` | a szerző e-mail-címe |
| `{author_website}` | a szerző weboldala |
| `{author_archive_url}` | a szerző archívumának hivatkozása |
| `{author_avatar}` | a szerző avatárja képként (szövegben) vagy kép URL-ként (hivatkozásban) |
| `{author_meta:meta_key}` | a megadott szerzőmeta értéke, például `{author_meta:first_name}` a keresztnevet adja |

Szűrési példák:

- `{author_bio:20}`: a bemutatkozás 20 szóra korlátozva.
- `{author_name:link}`: a név a szerző profiloldalára mutató hivatkozás.
- `{author_email:link}` és `{author_website:link}`: az e-mail-cím vagy a weboldal hivatkozásként.
- `{author_avatar:200}`: az avatár legfeljebb 200 képpont széles és magas.

### Lekérdezésmezők

`{query_loop_index}`: az aktuális cikluselem sorszáma, 0-tól indulva. A `@start-at` argumentummal más kezdőszámot adhatsz meg (`{query_loop_index @start-at:1}` 1-től indul). A `@pad` argumentum kitölti nullákkal a megadott szélességig: a `{query_loop_index @pad:3}` az `1` helyett `001`-et, a `10` helyett `010`-et ad, a `@pad:2` pedig `01`-et és `10`-et.

`{query_results_count}`: a lekérdezés találatainak száma. Cikluson belül és kívül is használható. Kívül szűrőként meg kell adni a lekérdezési ciklus Bricks azonosítóját is, így: `{query_results_count:quer34}`. Az azonosítót az elem jobb gombos helyi menüjéből másolhatod a vágólapra.

### Oldal és archívum mezői

| Címke | Mit ad vissza |
|---|---|
| `{site_title}` | az oldal címe (**Beállítások → Általános → Webhely címe**) |
| `{site_tagline}` | az alcím (**Beállítások → Általános**) |
| `{site_url}` | az oldal címe URL-ként |
| `{site_login}` | a belépési URL. Átirányítás belépés után: `{site_login:3}`, ahol a szám a céloldal azonosítója |
| `{site_logout}` | a kilépési URL. Átirányítás kilépés után: `{site_logout:3}` |
| `{archive_title}` | az archívum címe |
| `{archive_title:context}` | az archívum címe szövegkörnyezettel (előtaggal) |
| `{archive_description}` | az archívum leírása (szerző, bejegyzéstípus vagy kifejezés) |
| `{url_parameter:my_key}` | az URL `my_key` paraméterének értéke (például `https://példa.hu/?my_key=érték`) |

### Felhasználói profil mezői

Az aktuális (bejelentkezett) felhasználó adatait adják vissza.

| Címke | Mit ad vissza |
|---|---|
| `{wp_user_id}` | azonosító |
| `{wp_user_login}` | felhasználónév |
| `{wp_user_email}` | e-mail-cím |
| `{wp_user_url}` | weboldal |
| `{wp_user_author_url}` | szerzői archívum URL-je |
| `{wp_user_role}` | elsődleges szerepkör (a `:value` szűrő a szerepkör slugját adja) |
| `{wp_user_registered_date}` | regisztráció dátuma |
| `{wp_user_nicename}` | becenév (nicename) |
| `{wp_user_description}` | bemutatkozás |
| `{wp_user_first_name}` | keresztnév |
| `{wp_user_last_name}` | vezetéknév |
| `{wp_user_display_name}` | megjelenített név |
| `{wp_user_picture}` | avatár képként vagy URL-ként |
| `{wp_user_meta:my_user_meta_key}` | a `my_user_meta_key` felhasználómeta értéke |

### Natív WordPress egyéni mezők

A saját egyéni mezőidet `cf_` előtaggal kell megadni. Ha a mező neve `phone_number`, a címke `{cf_phone_number}`. A mező a dinamikus adatok választójában is megjelenik az **Egyéni mezők** csoportban.

## Dátum címkék

### Az aktuális dátum

- `{current_date}`: az aktuális dátum (UTC), a **Beállítások → Általános** oldalon megadott dátumformátumban.
- `{current_wp_date}`: az aktuális dátum a WordPress időzónája szerint, ugyanabban a formátumban.

Más formátumot PHP dátumformátummal adhatsz meg, például:

```
{current_date:Y}
{current_date:Ymd}
{current_date:Y-m-d}
{current_date:Y.m.d}
{current_date:Y/m/d}
{current_date:Y m d}
{current_date:g:i A}
{current_date:timestamp}
```

### Dátum átformázása

A `{format_date}` címke egy dátumot egyik formátumból a másikba alakít át, PHP kód nélkül:

```
{format_date @date:'2025-01-10' @from:'Y-m-d' @to:'d M Y'}
```

Argumentumai:

- `@date`: az átalakítandó dátum. Lehet fix érték vagy másik dinamikus címke.
- `@from`: a bemeneti formátum (például `Y-m-d`, `Y/m/d`, `Y-m-d\TH:i:s.v\Z`).
- `@to`: a kívánt kimeneti formátum (például `d M Y`, `timestamp`, `Y-m-d (l)`).

Példák:

1. **Egyszerű átalakítás.** A fenti címke kimenete `10 Jan 2025`.
2. **API-válaszból.** Ha a `{query_api @key:'registered'}` ISO formátumú dátumot ad (például `2025-04-30T09:41:02.053Z`), ezzel alakíthatod át: `{format_date @date:'{query_api @key:'registered'}' @from:'Y-m-d\TH:i:s.v\Z' @to:'Y m d (l)'}`. A kimenet: `2025 04 30 (Wednesday)`.
3. **Időbélyegre.** Dátumok összehasonlításához feltételben hasznos: `{format_date @date:'{cf_my_date}' @from:'Y/m/d' @to:'timestamp'}`, ahol a `{cf_my_date}` például `2025/03/25`.

## Haladó címkék

### echo

Az `echo` címke bármelyik PHP-függvény kimenetét megjeleníti:

- `{echo:my_custom_function}`: a `my_custom_function()` visszatérési értékét írja ki.
- `{echo:get_the_date('Y-m-d', '55')}`: az 55-ös azonosítójú bejegyzés dátuma `Y-m-d` formátumban.

A függvény argumentumait egyszeres idézőjelbe kell tenni, akár fix értékek, akár dinamikus címkék: `{echo:my_function('static value')}` és `{echo:my_function('{post_title}')}`.

A használható függvényeket a `bricks/code/echo_function_names` szűrővel kell engedélyezni.

### do_action

A `do_action` címkével műveletkampót (action hook) helyezhetsz el a sablonban, így más bővítmények is beléphetnek a tervedbe. Például a `{do_action:woocommerce_after_single_product}` a WooCommerce egyoldalas terméksablonba illesztve lehetővé teszi, hogy más bővítmények a termékoldal végére tegyenek tartalmat.

### WooCommerce

Aktív WooCommerce esetén további címkék érhetők el a termékekhez és rendelésekhez. A WooCommerce moduláris (v2) elemekhez a kosár végösszegének, a pénztár lépéseinek, a WooCommerce URL-eknek, a fiókcímeknek, a rendeléseknek, a letöltéseknek és a vásárlói jegyzeteknek is vannak címkéi.

## Szűrők

A címkék kimenetét ezekkel a szűrőkkel módosíthatod:

| Szűrő | Hatás |
|---|---|
| `:<szám>` | szövegmezőnél a megadott szószámra vágja a tartalmat (`{post_excerpt:10}`); avatármezőnél a kép szélessége és magassága |
| `:context` vagy `:prefix` | szövegkörnyezetet (előtagot) ad az archívum címéhez |
| `:image` | a mezőt kép címkeként adja vissza |
| `:link` | a mezőt hivatkozásként adja vissza |
| `:newTab` | a hivatkozás új lapon nyílik |
| `:tel` | a hivatkozás URL-je telefonszám formátumú (`tel:+123456789`) |
| `:<szöveg>` | szövegkörnyezettől függően felhasználó- vagy kifejezésmeta kulcs, URL-paraméter kulcs, kifejezések elválasztója, dátumformátum, képméret slug (például `thumbnail`, `full`) vagy az echo függvény neve |
| `:value` | a felirat helyett az értéket adja vissza. Elemfeltételekben választó típusú mezők összehasonlításához hasznos (Meta Box jelölőnégyzet-lista, ACF Select, Checkbox, Radio Button, Button Group mezők, ha a visszatérési típus „Both (Array)”) |
| `:raw` | a címke feldolgozását kihagyja |
| `:url` | egy azonosítóból URL-t ad (például fájl típusú mezőnél) |
| `:format` | megtartja a HTML-formázást, vagy WooCommerce-nél az üres csillagokat is mutatja az értékelésnél |
| `:plain` | eltávolítja a HTML-címkéket (`wp_strip_all_tags`), például a kifejezéslistából a hivatkozásokat |
| `:array_value\|{KULCS}` | egy tömb eredmény megadott kulcsának értékét adja. Hasznos az ACF Google Map és Link típusú mezőihez, és az echo címkével is használható. Beágyazott tömbnél JSON szövegként adja vissza. Csak akkor használd, ha biztos vagy benne, hogy az eredmény tömb; hiányzó kulcsnál üres szöveg jön |
| `:timestamp` | a dátum vagy idő értékét időbélyeggé alakítja |
| `:slug` és `:term_id` | a `{post_terms_xxxx}` címkéknél a kifejezés neve helyett a slugot vagy az azonosítót adja. Feltételben és taxonómia lekérdezésben az `:plain` szűrővel együtt használd: `{post_terms_xxxx:slug:plain}` |

Az `:array_value` szűrő példái:

- `{acf_place_map:array_value|lat}`: az ACF Google Map mező szélességi koordinátája.
- `{acf_place_map:array_value|post_code}`: az irányítószám.
- `{acf_ext_link:array_value|title}`: az ACF Link mező címe.
- `{je_football-team_logo:array_value|id}`: a JetEngine médiamező azonosítója (ha az értékformátum „tömb”).
- `{mb_testimonials_user_image:array_value|name}`: a Meta Box egyképes mező neve.
- `{echo:custom_function:array_value|hello}`: a `custom_function()` eredményének `hello` kulcsa.

## Kulcs-érték argumentumok

A dinamikus címkékhez kulcs-érték argumentumokat is adhatsz: `{címke @kulcs:érték}`. A szóközt tartalmazó szöveget egyszeres idézőjelbe kell tenni, és az érték is tartalmazhat dinamikus címkét (például `{acf_text_field @fallback:'No content was found for {post_title}'}`).

| Argumentum | Mit csinál |
|---|---|
| `@fallback` | tartalék szöveg, ha a címke nem ad vissza adatot. Bármelyik címkével használható |
| `@fallback-image` | tartalék kép képcímkékhez. Mellékletazonosító vagy URL lehet |
| `@sanitize` | a szövegkörnyezetben használt címkék tisztítási módját szabályozza |

A `@fallback` példái:

- `{acf_text_field @fallback:'This is the fallback text!'}`: ha az `acf_text_field` üres, a tartalék szöveg jelenik meg.
- `{acf_page_builder_cta_modul_options_css_id @fallback:'{acf_get_row_layout}-{query_loop_index}'}`: ha a mező üres, az aktuális ACF Flexible elrendezés neve és a ciklussorszám kerül a helyére. Dinamikus CSS-azonosítónál hasznos.

A `@fallback-image` példái: `{acf_image @fallback-image:554}` vagy `{acf_image @fallback-image:'https://example.com/placeholder.png'}`. Ha az `acf_image` nem elérhető, a megadott kép jelenik meg.

A `@sanitize` alapból mindent a `wp_kses_post` függvénnyel tisztít, ami kiszűri a nem kívánt HTML-t és szkripteket. Ez akkor okozhat gondot, ha egy egyéni mezőben JavaScriptet kiadó rövidkód (például űrlap) van: a szkript kiszűrődik, és az űrlap nem működik. Példák:

- `{acf_my_wysiwyg @sanitize:false}`: kikapcsolja a tisztítást, így a szkriptek is megjelennek. Csak akkor használd, ha biztos vagy abban, hogy a tartalom tisztítás nélkül is biztonságos.
- `{acf_my_wysiwyg @sanitize:sanitize_email}`: a `sanitize_email` függvényt alkalmazza. Ha az érték nem érvényes e-mail-cím, üres lesz.
- `{acf_my_wysiwyg @sanitize:sanitize_email @fallback:'abc@gmail.com'}`: ha a tisztítás után üres az eredmény, a tartalék cím jelenik meg.

## Fejlesztői kampók

- `bricks/dynamic_data/exclude_tags`: címkék listáját zárja ki a Bricks dinamikus adatkezeléséből.
- `bricks/dynamic_data/replace_nonexistent_tags`: kikapcsolja azt az alapviselkedést, hogy a nem létező címkéket üres szövegre cseréli a Bricks.
