# Felhasználók listázása: profillink, ábécészűrő, csak szerzők

> Kattintható felhasználói profil a Listing Gridben, ábécészűrő a felhasználók listájához, és csak a bejegyzést közzétett felhasználók megjelenítése.

Három megoldás a **Users** forrású Listing Gridhez. A felhasználói listázási elem alapjairól a [Felhasználók listázási sablonja](https://hub.hellowp.io/hu/plugins/jet-engine/listazas-felhasznalok-sablon/) fejezetben olvashatsz.

## Kattintható felhasználói profil

A cél, hogy a listában minden felhasználó neve a saját profiloldalára vigyen.

Előfeltétel: ingyenes Elementor vagy blokkszerkesztő, aktív JetEngine, és engedélyezett **Profile Builder** modul elkészített felhasználói profiloldallal.

1. A **JetEngine → Listázások/komponensek** oldalon kattints az **Új elem hozzáadása** gombra, és a listázási forrás legyen **Users**.
2. A megnyíló Elementor-szerkesztőben tegyél le egy **Heading** widgetet.
3. A **Link** sor dinamikus címkék ikonjára kattintva válaszd a **Profile Page URL** címkét. A beállításoknál a **Profile Page** legördülő listában az a profiloldal kell, amelyet a Profile Builder beállításai között, a **User Page** fülön találsz.
4. A **Title** mezőbe írhatsz szabad szöveget, vagy beállíthatod, hogy a lekérdezett felhasználó becenevét írja ki.
5. Frissítsd a listázási elemet.
6. Az oldalon, ahol a lista megjelenik, add hozzá a **Listing Grid** widgetet, és válaszd ki a most elkészített listázási elemet. Frissítsd az oldalt.

Innentől minden felhasználó neve a saját profiloldalára mutat.

## Ábécészűrő a felhasználók listájához

A JetSmartFilters ábécészűrője (**Alphabet**) csak bejegyzésekkel és termékekkel működik, a felhasználók listájára közvetlenül nem alkalmazható. Helyette egy **Radio** szűrő és egy egyéni SQL-lekérdezés együtt adja ugyanezt. Szükséges: ingyenes Elementor, blokkszerkesztő vagy Bricks, aktív JetSmartFilters és JetEngine, és egy felhasználókat megjelenítő listázási elem.

### A szűrő

1. A **Smart Filters → Add New** oldalon adj nevet a szűrőnek (például „Ábécészűrő”), a típusa legyen **Radio**.
2. A **Data Source** értéke **Manual Input**, majd az **Options List** résznél kattints az **Add New** gombra.
3. Minden betűhöz vegyél fel egy opciót, amelynek az értéke egy reguláris kifejezés a kis- és nagybetűs változattal:
   - `^a|^A`
   - `^b|^B`
   - `^c|^C`
   és így tovább az összes betűig. Ettől a szűrő nem érzékeny a kis- és nagybetűre.
4. Ha szeretnéd, kapcsold be az **Ability to deselect radio buttons** kapcsolót.
5. A **Query Variable** mezőbe ezt írd: `_plain_query::filtering`. A `_plain_query::` rész jelzi, hogy az érték sima SQL-értékként kerül a lekérdezésbe, a `filtering` pedig egy tetszőleges változónév, amelynek meg kell egyeznie a Lekérdezéskészítőben megadott **Variable Name** értékkel.
6. Töltsd ki a **Filter Labels** részt, majd kattints az **Update** gombra.

### Az SQL-lekérdezés

1. Nyisd meg a **JetEngine → Lekérdezéskészítő** oldalt, és kattints az új lekérdezés hozzáadására.

![Új lekérdezés hozzáadása a Lekérdezéskészítőben](./kepek/listazas-7-lekerdezes-uj.webp)

*Új lekérdezés hozzáadása 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 az új lekérdezés űrlapja látszik: a nevet és a típust itt adod meg, az **Egyéni lekérdezés-ID** mezőt pedig akkor használod, ha több szűrt listát kötsz össze az oldalon.

2. Add meg a nevet (például „Felhasználók ábécészűrő lekérdezése”), a lekérdezés típusa legyen **SQL/AI Query**.
3. A **Custom SQL Query** szakaszban a **From table** listából válaszd a `users` táblát.
4. A **Where (query clauses)** résznél kattints az **Add new** gombra: **Column** = `display_name`, **Operator** = **Regexp** (reguláris kifejezéssel egyezés; így a megadott betűvel kezdődő nevek jönnek).
5. A **Value** mező melletti dinamikus címkék gombbal válaszd a **JetSmartFilters Query** címkét, a **Type** értéke **Plain Query Var**, a **Variable Name** pedig a szűrő **Query Variable** mezőjének második fele (`filtering`). Kattints az **Apply** gombra.
6. Pipáld be az **Exclude this clause from the query if the dynamic value is empty** jelölőnégyzetet, hogy a lista ne maradjon üres, amíg nincs kiválasztott betű.
7. Opcionális: az **Order & Order By** részben rendezhetsz (például `user_login`, **From lowest to highest values**, típus **Char**), a **Show/Per Page Limit** értéke lehet 6, az **Offset** 1 (ez kihagyja az első felhasználót, itt az adminisztrátort).
8. A **Cast result to instance of object** mezőben válaszd a **User** opciót, hogy a JetEngine felhasználóként értelmezze az eredményt.
9. Kattints az **Add Query** gombra.

### A lekérdezés és a szűrő az oldalon

1. Az oldalon add hozzá a **Listing Grid** widgetet a felhasználói listázási elemmel.
2. A **Custom Query** fülön kapcsold be a **Use Custom Query** kapcsolót, és válaszd ki az SQL-lekérdezést.
3. A lista fölé tedd a **Radio Filter** widgetet: a **Select filter** mezőben az ábécészűrő, a **This filter for** értéke **JetEngine**.
4. Tedd közzé az oldalt.

Ha egy oldalon több Listing Grid van, minden szűrt készlethez adj egyedi azonosítót: a Lekérdezéskészítőben a **Custom Query ID** mezőbe, ugyanezt a Listing Grid **Advanced** fülének **CSS ID** mezőjébe, és a szűrő widget **Query ID** mezőjébe. Így a szűrő csak a hozzá tartozó listára hat.

A frontenden a betűk választógombként jelennek meg a lista fölött. Egy betű kiválasztása után csak az azzal kezdődő nevű felhasználók maradnak.

## Csak a bejegyzést közzétett felhasználók

Ha csak azokat a felhasználókat akarod listázni, akik tényleg publikáltak bejegyzést vagy oldalt, két lekérdezés kell: egy SQL, amely kiválasztja őket, és egy felhasználói lekérdezés, amely az SQL eredményét használja.

### SQL-lekérdezés

1. A **JetEngine → Lekérdezéskészítő** oldalon hozz létre egy lekérdezést (például „felhasználók bejegyzésekkel”), típusa **SQL/AI Query**.
2. A **Custom SQL Query** szakaszban kapcsold be az **Advanced/AI mode** kapcsolót.
3. Az **SQL Query** mezőbe írd:

```sql
SELECT *
FROM (
   SELECT
   {prefix}users.ID,
   display_name,
   user_login,
   user_nicename,
   COUNT( {prefix}posts.ID ) AS n,
   SUBSTRING_INDEX(display_name,' ',-1 ) AS lastname

   FROM {prefix}users
   JOIN {prefix}posts
     ON {prefix}posts.post_author = {prefix}users.ID
   WHERE {prefix}posts.post_type IN ( 'page', 'post' )
   GROUP BY {prefix}posts.post_author
   ORDER BY n DESC
   LIMIT 10 ) AS SortedByCount
ORDER BY lastname
```

4. Az eredményt a lekérdezés szerkesztőjének tetején az **Eredmények előnézete** kapcsolóval ellenőrizheted.
5. Mentsd a lekérdezést.

A lekérdezés az alap bejegyzések és oldalak szerzőit adja vissza, a létrehozott tartalmak száma szerint csökkenő sorrendben (legfeljebb 10 felhasználó), majd vezetéknév szerint rendezi őket. Ha egyéni bejegyzéstípus szerzőit is látni akarod, add hozzá a típus slugját a `WHERE` sor listájához, például `( 'page', 'post', 'property' )`.

### Felhasználói lekérdezés

1. Hozz létre egy új lekérdezést „felhasználók bejegyzésekkel 2” néven, típusa **Users Query**.
2. Az **Include/Exclude** fülön az **Include** mező melletti makrógombbal (érmehalom ikon) válaszd a **Query Results** makrót.
3. A **Query** listában az előbbi SQL-lekérdezést válaszd, a **Return** értéke **List of selected fields from item object**, a vesszővel elválasztott mezők közé pedig `ID` kerül.
4. Kattints az **Apply**, majd az **Add/Update Query** gombra.

### Listázási elem és oldal

1. A **JetEngine → Listázások/komponensek** oldalon hozz létre egy új elemet **Users** forrással.
2. Tegyél bele **Dynamic Field** widgetet: a **Source** legyen **Post/Term/User/Object Data**, az **Object Field** listából választhatsz (például megjelenítendő név, azonosító, e-mail, regisztráció dátuma). A felhasználókhoz rendelt metaboxok mezőit **Dynamic Field** és **Dynamic Image** widgetekkel jelenítheted meg.
3. Frissítsd a listázási elemet.
4. Az oldalon helyezz el egy **Listing Grid** widgetet ezzel az elemmel, a **Custom Query** fülön kapcsold be a **Use Custom Query** kapcsolót, és válaszd a „felhasználók bejegyzésekkel 2” lekérdezést.
5. Tedd közzé az oldalt.

A frontenden csak azok a felhasználók látszanak, akiknek van bejegyzésük vagy oldaluk.
