# Keresés metamezőben és bejegyzéstulajdonságban

> Egyéni keresés SQL/AI lekérdezéssel: a Keresés szűrő a bejegyzés címében és egy metamezőben is keres.

A **Keresés** szűrő alapból vagy az alapértelmezett bejegyzéstulajdonságokban (cím, kivonat, tartalom), vagy metamezőkben keres, a kettő nem vonható össze. Ha mégis mindkettőben keresnél, például egy egyéni bejegyzéstípus címében és egy szöveges metamezőjében, egy SQL/AI lekérdezés segít. A megoldás három lépés: SQL/AI lekérdezés, erre épülő bejegyzés lekérdezés, és a keresés szűrő.

## Követelmények

- JetSmartFilters és JetEngine aktív, van egyéni bejegyzéstípus és hozzá listing elem (sablon).

## 1. Az SQL/AI lekérdezés

1. Nyisd meg a **JetEngine → Query Builder → Add New** oldalt.
2. Add meg a nevet (a példában „Search Filter”), és a **Query Type** legyen **SQL/AI Query**.
3. Görgess lejjebb, kapcsold be az **Advanced/AI mode** kapcsolót, és az **SQL Query** mezőbe írd be az alábbi lekérdezést:

```sql
SELECT p.*

FROM {prefix}posts p

LEFT JOIN {prefix}postmeta pm ON pm.post_id = p.ID AND pm.meta_key = 'property_description'

WHERE (

    p.post_type="properties" AND

    ( "%jsf_filter_query|query_var|search_for_sql||plain%" = '' OR

    p.post_title LIKE "%%jsf_filter_query|query_var|search_for_sql||plain%%" OR

    pm.meta_value LIKE "%%jsf_filter_query|query_var|search_for_sql||plain%%"

    )

);
```

4. Igazítsd a kódot a saját esetedhez: a `p.post_type="properties"` sorba a saját bejegyzéstípusod azonosítóját (slug) írd, a `pm.meta_key = 'property_description'` részbe pedig annak a metamezőnek a Name/ID értékét, amelyben keresni szeretnél. A lekérdezés a bejegyzés címében és ebben a metamezőben keres.
5. A **Cast result to instance of object** listában válaszd a **Post** lehetőséget.
6. Mentsd a lekérdezést az **Add Query** vagy **Update Query** gombbal.

A `{prefix}` helyére a Query Builder magától a webhely adatbázis-előtagját helyettesíti be (például `wp_`).

## 2. A bejegyzés lekérdezés

1. Hozz létre egy új lekérdezést a **JetEngine → Query Builder → Add New** oldalon. A neve legyen például „Search Filter 2”, a **Query Type** **Posts Query**, a **Custom Query ID** pedig tetszőleges azonosító (a példában `some_id`).
2. A **Posts Query** szakasz **General** fülén a **Post Type** listában válaszd ki az egyéni bejegyzéstípust.
3. A **Post & Page** fülön a **Post In** mező melletti dinamikus címke ikonra kattintva válaszd a **Query Results** makrót. A felugró ablakban a **Query** listából jelöld ki az SQL/AI lekérdezést („Search Filter”), a **Return** listából a **List of items IDs** értéket, majd kattints az **Apply** gombra.
4. Mentsd a lekérdezést.

## 3. A keresés szűrő

1. Az **Intelligens szűrők → Új hozzáadása** oldalon add meg a nevet, és a **Szűrő típusa** legyen **Keresés**.
2. A **Keresés módja** listában válaszd az **Egyéni mező szerint (lekérdezési változóból)** lehetőséget.
3. A **Lekérdezési változó** mező melletti dinamikus címke ikonnal válaszd a **Plain Query Variable** lehetőséget, és a **Variable Name** legyen `search_for_sql`. A mezőben ekkor a `_plain_query::search_for_sql` érték jelenik meg.
4. Mentsd a szűrőt az **Update** gombbal.

![Keresés szűrő egyéni mező szerint](./kepek/kereses-egyeni-mezo.webp)

*Keresés szűrő egyéni mező szerint* (https://minta-bolt.hu/wp-admin/admin.php?page=jet-smart-filters)

A képen a **Keresés módja** az egyéni mező szerinti kereséssel és a **Lekérdezési változó** látszik.

## 4. Az oldalon

1. Hozz létre vagy nyiss meg egy oldalt. A példában két oszlopot készítünk: a jobb oszlopba a **Listing Grid** kerül.
2. A Listing Gridnél válaszd ki a listing sablont, majd a **Advanced** fülön a **CSS ID** mezőbe írd be a bejegyzés lekérdezés **Custom Query ID** értékét (`some_id`).
3. A bal oszlopba tedd a **Search Filter** widgetet. A **Select filter** listában válaszd ki a szűrőt, a **This filter for** listában a **JetEngine** értéket, az **Apply type** legyen **Mixed**.
4. A **Query ID** mezőbe írd be ugyanazt az azonosítót (`some_id`).
5. Szükség szerint igazítsd a keresés további beállításait, majd tedd közzé az oldalt.

## Próba

A nyilvános oldalon írj be egy szót (a példában „garage”), és kattints az alkalmaz gombra. A lista a találatokra szűkül: azokat a bejegyzéseket mutatja, amelyek címében vagy a megadott metamezőjében szerepel a keresett szöveg.
