# MU-pluginek és szűrők

> Hogyan adsz szűrőt és hookot a Complianzhoz must-use bővítménnyel, hogyan kényszeríted a sütiket a gyökérre, és mik a kész szűrőpéldák.

Ha a Complianz egy beépített működését a saját esetedhez kell igazítanod (például más „Bővebben” URL-t vagy egyedi helyőrzőt szeretnél), sokszor nem kell a bővítményhez nyúlnod: elég egy szűrő. A szűrőket ajánlottan **MU-pluginnel** (must-use bővítménnyel) adod hozzá.

## Szűrők röviden

A WordPress szűrőkkel (filter hook) engedi, hogy a bővítmények futás közben módosítsanak adatot. A bővítmény egy visszahívó függvényt köt a szűrőhöz. Amikor a szűrő lefut, minden hozzákötött függvény prioritási sorrendben megkapja az értéket, és újat adhat vissza helyette.

```php
<?php
function example_callback( $example ) {
    // Itt módosíthatod az $example értékét.
    return $example;
}
add_filter( 'example_filter', 'example_callback' );
```

Az `$example` átkerül a függvénybe, (esetleg) módosul, és visszatér. Ha még sosem használtál `add_filter()`-t, módosítás előtt készíts biztonsági mentést a fájlról, és legyen kéznél FTP-hozzáférés, hogy hiba esetén visszaállíthass.

## Miért MU-plugin, és nem a functions.php?

A MU-plugin a `wp-content` alatti `mu-plugins` mappa fájljainak gyűjteménye. Ezeket a WordPress alapból betölti, és a WordPress-adminban nem lehet kikapcsolni őket. A fájlok a WordPress és a téma frissítésekor is a helyükön maradnak.

A szűrőt a `functions.php`-ba is beírhatod, de ennek hátrányai vannak:

- a téma frissítésekor a `functions.php` új verzióra cserélődik, és az általad hozzáadott kód elvész (kivéve, ha gyermektémát használsz);
- a `functions.php` a témához tartozik, ezért témaváltáskor a kódod többé nem fut le.

A WordPress mindig ellenőrzi, hogy létezik-e a `/mu-plugins/` mappa, és lefuttatja a benne lévő szkripteket. Ez a WordPress magja után történik, tehát a MU-pluginben lévő kód a `/plugins/` és a `/themes/` mappák kódja előtt fut le. A mappa alapból nem létezik: hozd létre FTP-kliensben a `/wp-content/` könyvtárban, hogy az eredmény `/wp-content/mu-plugins/` legyen.

## Szűrő hozzáadása MU-pluginnel

1. Nyiss egy szövegszerkesztőt, hozz létre új fájlt, és kezdd a `<?php` sorral.
2. Másold be a szűrő kódját (például az alábbi gyűjteményből).
3. Mentsd a fájlt `.php` kiterjesztéssel, például `myfilter.php` néven. Használj beszédes fájlnevet, hogy később is tudd, mire való az adott MU-plugin, főleg ha több van belőle.
4. Töltsd fel a fájlt a `wp-content/mu-plugins/` mappába FTP-vel (például FileZillával vagy Cyberduckkal).
5. Ellenőrizd az oldalon, hogy megvan-e a kívánt hatás. Egyes szűrők csak a gyorsítótár ürítése után látszanak, ezért érdemes privát (inkognitó) ablakban tesztelni. Ha hiba jelenik meg, töröld a fájlt a `mu-plugins` mappából, és az oldal visszaáll.

Ha a szűrőt a `functions.php`-ba teszed, hagyd ki a fájl első, `<?php` sorát. MU-pluginben ez a sor maradhat.

## Példa: sütik beállítása a gyökérre

Gyakran kért igény, hogy a sütik elérési útját a webhely gyökerére (vagy egy aldomainre) kényszeríted. Ez főleg több WordPress-telepítéses domaineknél kell, ahol a hozzájárulás-kezelést egységesíteni szeretnéd.

A Complianz a sütik útvonalát és tartományát két szűrővel adja át, amelyeket MU-pluginből felülírhatsz:

- `cmplz_cookie_path`: a süti elérési útja (alapesetben a webhely útvonala, gyökéren `/`);
- `cmplz_cookie_domain`: a süti tartománya.

Egy MU-plugin, amely a sütiket a gyökérútvonalra állítja:

```php
<?php
add_filter( 'cmplz_cookie_path', function( $path ) {
	return '/';
} );
```

Ha másik könyvtárba vagy almappába szeretnéd állítani, a `'/'` helyére írd az útvonalat. Mentsd például `force-cookies-on-root.php` néven, és töltsd fel a `/wp-content/mu-plugins/` mappába.

Egy másik, a gyökérre vonatkozó beállítás a varázslóban is megvan, a sütik gyökértartományra állítása. Az MU-pluginre akkor van szükség, ha ennél egyedibb viselkedést akarsz.

## Szűrőgyűjtemény

Az alábbi szűrők készen vannak, csak az értékeket kell átírnod. Mindegyik `<?php` sorral kezdődik, ezt `functions.php`-nál hagyd ki.

### Szkriptek blokkolása és feloldása a sütiblokkolóban

```php
<?php
function cmplz_edit_script_tags( $script_tags ) {
	$script_tags[] = 'my-blocked-url.com';
	unset( $script_tags['my-un-blocked-url.com'] );
	return $script_tags;
}
add_filter( 'cmplz_known_script_tags', 'cmplz_edit_script_tags' );
```

Az URL-ek a blokkolandó szkriptek vagy a tartalmukban szereplő szövegrészek. Az `unset` sor a blokkolásból kivett elemhez való.

### Aszinkron szkriptek blokkolása és feloldása

```php
<?php
function cmplz_edit_async_script_tags( $async_script_tags ) {
	$async_script_tags[] = 'my-blocked-url.com';
	unset( $async_script_tags['my-un-blocked-url.com'] );
	return $async_script_tags;
}
add_filter( 'cmplz_known_async_tags', 'cmplz_edit_async_script_tags' );
```

### iframe-ek blokkolása és feloldása

```php
<?php
function cmplz_edit_iframe_tags( $iframe_tags ) {
	$iframe_tags[] = 'my-blocked-url.com';
	unset( $iframe_tags['my-un-blocked-url.com'] );
	return $iframe_tags;
}
add_filter( 'cmplz_known_iframe_tags', 'cmplz_edit_iframe_tags' );
```

### A videót tartalmazó elem osztálya

```php
<?php
function cmplz_edit_video_class( $class ) {
	$class .= ' my-class';
	return $class;
}
add_filter( 'cmplz_video_class', 'cmplz_edit_video_class' );
```

### A blokkolt tartalmon megjelenő szöveg

```php
<?php
function cmplz_edit_blocked_content_text( $text ) {
	$text = 'Ez a tartalom blokkolva van.';
	return $text;
}
add_filter( 'cmplz_accept_cookies_blocked_content', 'cmplz_edit_blocked_content_text' );
```

### A dokumentum HTML-megjegyzése

```php
<?php
function cmplz_edit_document_comment( $comment ) {
	$comment = 'my-comment';
	return $comment;
}
add_filter( 'cmplz_document_comment', 'cmplz_edit_document_comment' );
```

### A dokumentum HTML-kimenete

Átadja a HTML-t, a dokumentum típusát (például `cookie-policy`) és az oldal azonosítóját.

```php
<?php
function cmplz_edit_document_html( $html, $type, $post_id ) {
	// itt módosíthatod a HTML-t
	return $html;
}
add_filter( 'cmplz_document_html', 'cmplz_edit_document_html', 10, 3 );
```

### A dokumentum CSS-e

```php
<?php
function cmplz_edit_custom_document_css( $custom_css, $type, $post_id ) {
	// itt módosíthatod a CSS-t
	return $custom_css;
}
add_filter( 'cmplz_custom_document_css', 'cmplz_edit_custom_document_css', 10, 3 );
```

### A sütisáv beállításai (például a „Bővebben” hivatkozás)

A sávbeállítások tömbjét a `cmplz_cookiebanner_settings` szűrő adja át. Régebbi leírásokban ezt `cmplz_cookie_settings` néven találod, de ebben a verzióban csak a `cmplz_cookiebanner_settings` létezik. A módosítandó tömbelem kulcsát előbb írasd ki (`var_dump( $output )`), mielőtt felülírod.

```php
<?php
function cmplz_edit_cookie_settings( $output ) {
	// itt módosíthatod a sávbeállítás tömbjét
	return $output;
}
add_filter( 'cmplz_cookiebanner_settings', 'cmplz_edit_cookie_settings' );
```

### A visszavonási hivatkozás HTML-je

```php
<?php
function cmplz_edit_revoke_link( $html ) {
	// itt módosíthatod a visszavonási hivatkozás HTML-jét
	return $html;
}
add_filter( 'cmplz_revoke_link', 'cmplz_edit_revoke_link' );
```

### Egyedi helyőrző szolgáltatásonként

Átadja a jelenlegi (alapértelmezett) helyőrzőt, a típust (például `youtube`) és az eredeti forrást.

```php
<?php
function cmplz_edit_placeholder( $new_src, $type, $original_src ) {
	// itt adhatsz vissza másik helyőrző-útvonalat
	return $new_src;
}
add_filter( 'cmplz_placeholder', 'cmplz_edit_placeholder', 10, 3 );
```

### Az alapértelmezett helyőrzőkép

```php
<?php
function cmplz_edit_default_placeholder( $placeholder ) {
	$placeholder = 'my-placeholder-url';
	return $placeholder;
}
add_filter( 'cmplz_default_placeholder', 'cmplz_edit_default_placeholder' );
```
