# Egyedi oszlop, biztonsági ellenőrzések és widgetkorlát kóddal

> Új oszlop a Webhelyek kezelése táblázatban, a Webhely biztonságának megerősítése ellenőrzéseinek elhagyása és a Nem MainWP widget bejegyzéseinek korlátozása a Custom Dashboard kiegészítővel.

Három haladó testreszabás kódrészlettel történik. Mindegyikhez a **Custom Dashboard** kiegészítő (ingyenes) **PHP** füle kell: **Kiegészítők → Custom Dashboard**. A kiegészítő telepítéséről a [kiegészítők kezelése](https://hub.hellowp.io/hu/plugins/mainwp/iranyitopult-kiegeszitok/) fejezet szól. Minden módosítás a **Save Changes** gombbal lép érvénybe.

## Új oszlop a Webhelyek kezelése táblázatban

A **Webhelyek → Webhelyek kezelése** táblázatba bármilyen saját adatot felvehetsz új oszlopként. Két szűrő kell hozzá:

| Szűrő | Mire való |
|---|---|
| `mainwp_sitestable_getcolumns` | Felveszi az oszlopot a táblázat fejlécébe |
| `mainwp_sitestable_item` | Kitölti az oszlop értékét minden sorban |

Az oszlop kulcsának egyedinek kell lennie, és a két szűrőben ugyanannak. Az alábbi példa a Child-webhelyek cURL-verzióját mutatja:

1. Nyisd meg a **Custom Dashboard** kiegészítő **PHP** fülét.
2. Illeszd be:

   ```php
   add_filter( 'mainwp_sitestable_getcolumns', 'mycustom_sites_table_column', 10 );
   function mycustom_sites_table_column( $cols ) {
       $cols['child_curl_version'] = 'cURL verzió';
       return $cols;
   }

   add_filter( 'mainwp_sitestable_item', 'mycustom_sitestable_item', 10 );
   function mycustom_sitestable_item( $item ) {
       $options = apply_filters( 'mainwp_getwebsiteoptions', array(), $item['id'], 'site_info' );
       $website_info = json_decode( $options, true );
       if ( is_array( $website_info ) && isset( $website_info['child_curl_version'] ) ) {
           $item['child_curl_version'] = $website_info['child_curl_version'];
       } else {
           $item['child_curl_version'] = '';
       }
       return $item;
   }
   ```

3. Mentsd el, és nyisd meg a **Webhelyek → Webhelyek kezelése** oldalt: az új oszlop ott van.
4. Az oszlop fejlécét húzással a kívánt helyre teheted.

Az alap váz, ha más adatot jelenítenél meg:

```php
add_filter( 'mainwp_sitestable_getcolumns', 'my_custom_column', 10 );
function my_custom_column( $cols ) {
    $cols['column_key'] = 'Oszlop fejléce';
    return $cols;
}

add_filter( 'mainwp_sitestable_item', 'my_custom_item', 10 );
function my_custom_item( $item ) {
    $item['column_key'] = 'Érték';
    return $item;
}
```

Az `$item['column_key']` értéke tetszőleges szöveg vagy HTML lehet.

### Elérhető webhelyadatok

A `mainwp_getwebsiteoptions` szűrő `site_info` értékéből json_decode után ezek a mezők érhetők el:

| Mező | Tartalom |
|---|---|
| `child_curl_version` | A cURL verziója |
| `child_openssl_version` | A cURL által használt OpenSSL verziója |
| `child_version` | A MainWP Child verziója |
| `db_size` | Az adatbázis mérete |
| `debug_mode` | Be van-e kapcsolva a WordPress hibakeresési módja |
| `format_datetime` | Az időzóna, a dátum- és az időformátum |
| `ip` | A szerver IP-címe |
| `memory_limit` | A PHP memóriakorlátja |
| `mysql_version` | A MySQL verziója |
| `phpversion` | A PHP verziója |
| `site_lang` | A webhely nyelve |
| `site_public` | A keresőmotorok láthatósága |
| `themeactivated` | Az aktív sablon neve |
| `wpversion` | A WordPress verziója |

A `child_site_info` nem létező mező: a `site_info` már eleve tömbként tartalmazza az összes adatot.

## Biztonsági ellenőrzések elhagyása

A **Webhely biztonságának megerősítése** ellenőrzései jelzik a lehetséges problémákat a Child-webhelyeken. Ha egy ellenőrzés nálad nem releváns (például fejlesztői webhelyen szándékosan bekapcsolt hibakeresés, vagy tesztelés miatt megtartott inaktív sablonok), kódból kiveheted az eredményekből.

### Egy ellenőrzés elhagyása

1. Nyisd meg a **Custom Dashboard** kiegészítő **PHP** fülét.
2. Illeszd be:

   ```php
   add_filter( 'mainwp_security_issues_stats', 'mycustom_mainwp_security_issues_stats', 10, 3 );
   function mycustom_mainwp_security_issues_stats( $false, $issues, $website ) {
       if( is_array( $issues ) && isset( $issues['sec_inactive_themes'] ) ) {
           $issues['sec_inactive_themes'] = 'Y';
       }
       return $issues;
   }
   ```

3. Írd át a `sec_inactive_themes` azonosítót arra az ellenőrzésre, amelyet el akarsz hagyni.
4. Mentsd el.

| Ellenőrzés | Azonosító |
|---|---|
| WordPress verziója | `wp_uptodate` |
| PHP verziója | `phpversion_matched` |
| PHP hibajelentés | `php_reporting` |
| Adatbázis-hibajelentés | `db_reporting` |
| SSL protokoll | `sslprotocol` |
| Hibakeresési mód | `debug_disabled` |
| Elavult bővítmények | `sec_outdated_plugins` |
| Inaktív bővítmények | `sec_inactive_plugins` |
| Elavult sablonok | `sec_outdated_themes` |
| Inaktív sablonok | `sec_inactive_themes` |

### Több ellenőrzés elhagyása

Ebben a kódban a `//` jellel kezdődő sorok ki vannak kommentezve, az ellenőrzés aktív marad. Vedd ki a `//` jelet annál, amelyiket el akarsz hagyni:

```php
add_filter( 'mainwp_security_issues_stats', 'mycustom_mainwp_security_issues_stats', 10, 3 );
function mycustom_mainwp_security_issues_stats( $false, $issues, $website ) {
    if( is_array( $issues ) ) {
        //$issues['wp_uptodate'] = 'Y';
        //$issues['phpversion_matched'] = 'Y';
        //$issues['php_reporting'] = 'Y';
        //$issues['db_reporting'] = 'Y';
        //$issues['sslprotocol'] = 'Y';
        $issues['debug_disabled'] = 'Y';
        $issues['sec_outdated_plugins'] = 'Y';
        $issues['sec_inactive_plugins'] = 'Y';
        $issues['sec_outdated_themes'] = 'Y';
        $issues['sec_inactive_themes'] = 'Y';
    }
    return $issues;
}
```

Visszaállítás: töröld a megfelelő sort (vagy kommenteld ki `//`-lel), és mentsd.

## A Nem MainWP widget bejegyzéseinek korlátozása

Sok Child-webhelyet kezelő vezérlőpulton a **Nem MainWP** widget bejegyzéseinek száma ezres nagyságrendűre nőhet, és lelassítja a **Műveletek** oldalt. Alapból minden bejegyzés betöltődik. A korlátot kódból adhatod meg, kétféleképpen (elég az egyik).

**1. módszer (ajánlott): Custom Dashboard.** A **PHP** fülre:

```php
add_filter( 'mainwp_widget_site_actions_limit_number', 'mycustom_mainwp_widget_site_actions_limit_number' );
function mycustom_mainwp_widget_site_actions_limit_number( $value ) {
    return 200;
}
```

A `200` helyére a kívánt legnagyobb bejegyzésszámot írd, majd mentsd.

**2. módszer: a sablon `functions.php` fájlja.** Ha nem akarsz kiegészítőt telepíteni:

1. A vezérlőpult webhelyén nyisd meg az **Eszközök → Sablonszerkesztő** oldalt.
2. A jobb oldali listában kattints a **Sablonfüggvények (functions.php)** fájlra.
3. A fájl végére illeszd be ugyanazt a kódot.
4. Kattints a **Fájl frissítése** gombra.

Ha nem gyermeksablont használsz, a sablonfrissítés felülírja a módosítást. Ilyenkor inkább egy kódrészlet-bővítmény (például Code Snippets) való erre.

| A Child-webhelyek száma | Javasolt korlát |
|---|---|
| 100 és 200 között | 500 bejegyzés |
| 200 és 500 között | 200 bejegyzés |
| 500 felett | 100 bejegyzés |

Az értéket a szervered teljesítményéhez és ahhoz igazítsd, mennyi előzményt akarsz látni. A widgetek elrejtéséről a [vezérlőpult megjelenésének testreszabása](https://hub.hellowp.io/hu/plugins/mainwp/testreszabas-megjelenes/) szól, a teljesítményről a [Rendszer és teljesítmény](https://hub.hellowp.io/hu/plugins/mainwp/iranyitopult-rendszer/) fejezet.

## Webhely-hozzáférési SQL-feltételek lekérése saját lekérdezéshez

Ha saját PHP-kódból írsz egyedi lekérdezést a MainWP webhelyeire, a MainWP már meglévő hozzáférési feltételeit nem kell újraírnod: a `mainwp_get_sql_where_allow_access_sites` szűrő visszaadja őket. A kódot a vezérlőpult oldalán futtasd, miután a MainWP betöltötte a saját hookjait.

```php
$where = apply_filters( 'mainwp_get_sql_where_allow_access_sites', '', 'wp' );
```

| Argumentum | Típus | Jelentés |
|---|---|---|
| Kezdőérték | szöveg | Üres szöveget adj át, a MainWP nem használja fel |
| Tábla-álnév | szöveg | A webhelyek táblájának álneve a lekérdezésedben, alapértéke `wp` |
| Visszatérési érték | szöveg | `AND`-del kezdődő SQL-feltételek, egy meglévő `WHERE` feltétel után fűzheted |

A visszaadott feltételek a MainWP megszokott hozzáférés-szűrését követik, és kizárják az átmeneti (staging) webhelyeket. Az eredmény attól függ, milyen környezetben fut a kód.

Fontos tudnivalók:

- Ez a segéd csak a lekérdezési feltételeket adja, jogosultság-ellenőrzésnek nem elég. A kódnak továbbra is ellenőriznie kell a felhasználó műveleti jogosultságát, a webhelyhez való hozzáférését és az esetleges tulajdonosi korlátozásokat.
- Cron, WP-CLI és REST környezetben a hozzáférés kezelése eltérhet egy interaktív vezérlőpult-kéréstől.
- A felhasználótól érkező értékekhez továbbra is előkészített lekérdezést (prepared query) használj.
- A tábla-álnevet és az SQL-részletet ne fogadd kérésből: az álnevet a kódod rögzítse.

## Ellenőrző lista

- a **Custom Dashboard** kiegészítő telepítve és bekapcsolva van;
- a kód a **PHP** fülön van, és mentetted;
- az új oszlop megjelenik a **Webhelyek kezelése** táblázatban, és jó adatot mutat;
- a **Webhely biztonságának megerősítése** a helyes azonosítókat hagyja el;
- a **Műveletek** oldal gyorsabban töltődik be a korlát beállítása után.
