# Akciók és szűrők: e-mail beállítások, szintváltás, regisztrációfeldolgozás, szintek táblázata

> Tizenkét hook paraméterekkel és példákkal: egyedi e-mail beállítás és sablon, űrlapellenőrzés, regisztráció feldolgozása, szintváltási lehetőségek, a régi fizetésbeszúrás és a tagsági szintek táblázatának bővítése.

Ez a fejezet a [harmadik hookfejezet](https://hub.hellowp.io/hu/plugins/learndash-restrict-content-pro/fejlesztok-hookok-admin-es-profil/) folytatása. A hookok teljes listája az [Akciók és szűrők áttekintő listája](https://hub.hellowp.io/hu/plugins/learndash-restrict-content-pro/fejlesztok-altalanos-akciok-es-szurok-listaja/) fejezetben van. Az itt szereplő kód egyedi fejlesztés: a bővítmény támogatása nem terjed ki rá, bonyolultabb feladathoz érdemes fejlesztőt bevonni.

Az akciót `add_action`, a szűrőt `add_filter` hívással csatlakoztatod. Ha a függvényednek több paramétert kell kapnia, a prioritás után add meg a paraméterek számát is.

## E-mailek

### `rcp_email_settings`

Akció. Extra mezőket adhatsz vele a **Restrict → Settings → Emails** oldalhoz (a Beállítások oldal e-mail lapjához).

- Paraméter: `$rcp_options` (tömb), a bővítmény beállításai.

A mező `name` attribútuma kötelezően `rcp_settings[a_te_kulcsod]` alakú legyen: így menti el a bővítmény a többi e-mail beállítással együtt, és ugyanebből a tömbből olvashatod vissza.

```php
/**
 * Egyedi mező a Restrict → Settings → Emails oldalon.
 *
 * @param array $rcp_options A bővítmény beállításai.
 */
function pelda_rcp_email_settings( $rcp_options ) {
	$value = isset( $rcp_options['custom_email_note'] ) ? $rcp_options['custom_email_note'] : '';
	?>
	<tr valign="top">
		<th>
			<label for="rcp_settings[custom_email_note]"><?php esc_html_e( 'Egyedi e-mail megjegyzés', 'mytheme' ); ?></label>
		</th>
		<td>
			<input
				class="regular-text"
				id="rcp_settings[custom_email_note]"
				name="rcp_settings[custom_email_note]"
				type="text"
				value="<?php echo esc_attr( $value ); ?>"
			/>
			<p class="description"><?php esc_html_e( 'Ezt a beállítást az rcp_email_settings akció adta hozzá.', 'mytheme' ); ?></p>
		</td>
	</tr>
	<?php
}
add_action( 'rcp_email_settings', 'pelda_rcp_email_settings' );
```

### `rcp_email_templates`

Szűrő. Új e-mail sablon nevét regisztrálja. A sablon megjelenik a **Restrict → Settings → Emails** oldal sablonválasztó legördülő listájában, és kiválasztható.

- Paraméter: `$templates` (tömb), a sablonok kulcs és név párjai. Új sablonhoz adj hozzá egy új kulcsot és nevet.

```php
function pelda_rcp_email_templates( $templates ) {
	$templates['my-custom-template'] = __( 'Saját sablon', 'mytheme' );

	return $templates;
}
add_filter( 'rcp_email_templates', 'pelda_rcp_email_templates' );
```

A beépített sablonok a `wp-content/plugins/restrict-content-pro/templates/emails/` mappában vannak. Ha egyedi sablont választasz, a bővítmény három fájlt keres hozzá:

- `header-{sablonkulcs}.php`
- `body-{sablonkulcs}.php`
- `footer-{sablonkulcs}.php`

A fenti példában ezek a `header-my-custom-template.php`, `body-my-custom-template.php` és `footer-my-custom-template.php`. A fájlokat az aktív sablon (téma) `rcp/emails` mappájába tedd. Az elkészítésük menete ugyanaz, mint a többi sablonfájl felülírásánál: lásd a [Sablonfájlok](https://hub.hellowp.io/hu/plugins/learndash-restrict-content-pro/fejlesztok-altalanos-sablonfajlok/) fejezetet.

## Regisztrációs űrlap feldolgozása

### `rcp_form_errors`

Akció. A regisztrációs űrlap ellenőrzése után fut le, közvetlenül utána. Arra való, hogy a saját mezőidhez hibát jeleníts meg.

- Paraméter: `$posted` (tömb), az űrlappal elküldött összes adat. A bővítmény második paraméterként a `$customer` objektumot is átadja, de a példa csak a `$posted` tömböt használja.

A példa egy saját jelölőnégyzetet tesz az űrlapra az `rcp_after_register_form_fields` akcióval, és hibát ad, ha nincs bejelölve:

```php
/**
 * Jelölőnégyzet a regisztrációs űrlapon.
 */
function pelda_rcp_after_register_form_fields() {
	?>
	<p>
		<input name="rcp_sample_required_field" id="rcp_sample_required_field" type="checkbox" checked="checked" />
		<label for="rcp_sample_required_field"><?php esc_html_e( 'A mező címkéje*', 'mytheme' ); ?></label>
	</p>
	<?php
}
add_action( 'rcp_after_register_form_fields', 'pelda_rcp_after_register_form_fields' );

/**
 * Hiba, ha a jelölőnégyzet nincs bejelölve.
 *
 * @param array $posted Az űrlappal elküldött adatok.
 */
function pelda_rcp_form_errors( $posted ) {
	if ( ! isset( $posted['rcp_sample_required_field'] ) ) {
		rcp_errors()->add( 'sample_field_required', __( 'Be kell jelölnöd ezt a mezőt.', 'mytheme' ), 'register' );
	}
}
add_action( 'rcp_form_errors', 'pelda_rcp_form_errors' );
```

Kapcsolódó: `rcp_before_form_errors` ([űrlap-hookok](https://hub.hellowp.io/hu/plugins/learndash-restrict-content-pro/fejlesztok-hookok-urlapok-es-fizetes-2/)), az egyedi regisztrációs mezők létrehozása a [Regisztrációs űrlap](https://hub.hellowp.io/hu/plugins/learndash-restrict-content-pro/beallitasok-regisztracios-urlap/) fejezetben.

### `rcp_form_processing`

Akció. Közvetlenül azelőtt fut le, hogy a felhasználót a fizetési átjáróhoz küldené a bővítmény. Ingyenes tagságnál közvetlenül a bejelentkeztetés előtt indul. Itt érdemes elmenteni az egyedi regisztrációs mezők értékeit (például `update_user_meta()` hívással), mert ekkor már megvan a felhasználó azonosítója.

| Paraméter | Típus | Jelentés |
|---|---|---|
| `$_POST` | tömb | A regisztrációs űrlap összes adata. |
| `$user_id` | egész | Az újonnan létrehozott felhasználó azonosítója (vagy az a felhasználó, akihez az új tagságot adják). |
| `$price` | tizedes | A megvásárolt tagsági szint ára. |

Az `add_action` hívásnál a paraméterek számát add meg (például `10, 2`, ha a `$_POST` és a `$user_id` kell).

## Fizetési átjáró

### `rcp_gateway_{átjáró azonosítója}`

Akció. A regisztráció elküldésekor fut le, és átadja a regisztrációs adatokat a kiválasztott fizetési átjárónak. Paraméterei és példája az [első hookfejezetben](https://hub.hellowp.io/hu/plugins/learndash-restrict-content-pro/fejlesztok-hookok-urlapok-szintek-kedvezmenyek/) van, a „Fizetési átjárók” alcím alatt. Az egyedi fizetési átjáró megírásához a [Fizetési átjáró API](https://hub.hellowp.io/hu/plugins/learndash-restrict-content-pro/fejlesztok-altalanos-fizetesi-atjaro-api/) fejezet ad útmutatót.

## Szintváltás

Három szűrő szabályozza, mely tagsági szintekre válthat a felhasználó. Az `rcp_can_upgrade_subscription` szűrőt a [második hookfejezet](https://hub.hellowp.io/hu/plugins/learndash-restrict-content-pro/fejlesztok-hookok-urlapok-es-fizetes-2/) írja le.

### `rcp_get_membership_upgrade_paths`

Szűrő. Egy tagság számára elérhető szintváltási lehetőségeket szűri. Általában az összes aktív tagsági szint szerepel benne, kivéve azt, amelyikhez a tagság már tartozik. A szűrő a régebbi `rcp_get_upgrade_paths` helyére lépett.

| Paraméter | Típus | Jelentés |
|---|---|---|
| `$upgrade_paths` | tömb | Azoknak a tagsági szinteknek az objektumai, amelyekre a tagság fel- vagy leváltható. |
| `$membership_id` | egész | A vizsgált tagság azonosítója. |
| `$membership` | `RCP_Membership` | A tagság objektuma. |

```php
function pelda_rcp_get_membership_upgrade_paths( $upgrade_paths, $membership_id, $membership ) {
	// Csak a 3-as azonosítójú szintet hagyjuk meg lehetőségként.
	return array_filter( $upgrade_paths, function ( $level ) {
		return 3 === (int) $level->id;
	} );
}
add_filter( 'rcp_get_membership_upgrade_paths', 'pelda_rcp_get_membership_upgrade_paths', 10, 3 );
```

### `rcp_get_upgrade_paths` (elavult)

Szűrő, amelyet a bővítmény 3.0-s kiadása óta nem szabad használni: helyette az `rcp_get_membership_upgrade_paths` való. A felhasználó számára elérhető szintváltási lehetőségeket szűrte.

| Paraméter | Típus | Jelentés |
|---|---|---|
| `$upgrade_paths` | tömb | Azoknak a tagsági szinteknek az objektumai, amelyekre a felhasználó fel- vagy leválthat. A felhasználó meglévő aktív szintje nem szerepelhet benne. |
| `$user_id` | egész | A vizsgált felhasználó azonosítója. |

### `rcp_has_upgrade_path`

Szűrő. Azt dönti el, van-e a felhasználónak elérhető szintváltási lehetősége. Igaz (`true`) vagy hamis (`false`) értéket adj vissza.

| Paraméter | Típus | Jelentés |
|---|---|---|
| `$has_upgrade_path` | logikai | Van-e legalább egy tagsági szint, amelyre a felhasználó fel- vagy leválthat. |
| `$user_id` | egész | A vizsgált felhasználó azonosítója. |

```php
// Senki sem kap szintváltási lehetőséget.
add_filter( 'rcp_has_upgrade_path', '__return_false' );
```

## Fizetés

### `rcp_insert_payment` (elavult)

Akció. A fizetés adatbázisba kerülésekor futott le. A bővítmény 2.9-es kiadása óta elavult, helyette ezeket használd:

- `rcp_create_payment`: minden alkalommal fut, amikor új fizetés kerül az adatbázisba (a [második hookfejezet](https://hub.hellowp.io/hu/plugins/learndash-restrict-content-pro/fejlesztok-hookok-urlapok-es-fizetes-2/) leírja);
- `rcp_update_payment_status_complete`: akkor fut, amikor egy fizetés „complete” (teljesített) állapotú lesz.

A régi akció paraméterei:

| Paraméter | Típus | Jelentés |
|---|---|---|
| `$payment_id` | egész | A most beszúrt fizetés azonosítója. |
| `$args` | tömb | A beszúrásnál használt adatok (lent). |
| `$amount` | tizedes | A fizetés összege. |

A `$args` tömb elemei:

| Kulcs | Jelentés |
|---|---|
| `subscription` | A tagsági szint neve, amelyre a fizetés szól. |
| `date` | A fizetés dátuma. |
| `amount` | A fizetés összege. |
| `user_id` | A fizető felhasználó azonosítója. |
| `payment_type` | A fizetés típusa, például `manual`. |
| `subscription_key` | A feliratkozás kulcsa. |
| `transaction_id` | A tranzakció azonosítója az átjárónál. |
| `status` | A fizetés állapota: `complete`, `pending` vagy `refunded`. |

Ha új, teljesített fizetésnél akarsz kódot futtatni, mindig ellenőrizd, hogy az állapot `complete`-e.

Példa: e-mail az ügyfélnek új kézi fizetés létrehozásakor (a mai megfelelője az `rcp_create_payment` akciónál van):

```php
function pelda_rcp_insert_payment( $payment_id, $args, $amount ) {
	if ( 'manual' != $args['payment_type'] ) {
		return;
	}

	$user_info = get_userdata( $args['user_id'] );

	if ( ! $user_info ) {
		return;
	}

	$subject = __( 'A fizetésed függőben van', 'rcp' );
	$message = __( 'Szia %name%! A(z) %subscription_name% fizetésed még függőben van.', 'rcp' );

	$emails             = new RCP_Emails;
	$emails->member_id  = $args['user_id'];
	$emails->payment_id = $payment_id;

	$emails->send( $user_info->user_email, $subject, $message );
}
add_action( 'rcp_insert_payment', 'pelda_rcp_insert_payment', 10, 3 );
```

## Tagsági szintek táblázata

A **Restrict → Membership Levels** oldal táblázatát három akcióval bővítheted.

| Hook | Mire jó | Paraméter |
|---|---|---|
| `rcp_levels_page_table_column` | Új oszlop tartalmát írhatod ki soronként, a táblázat egy új oszlopába. | `$level_id`: a megjelenített tagsági szint azonosítója |
| `rcp_levels_page_table_footer` | Új láblécoszlopot adhatsz a táblázathoz. | nincs |
| `rcp_levels_below_table` | Tartalmat írhatsz a tagsági szintek táblázata alá. | nincs |

Az oszlop hookjait együtt használd, hogy a táblázat szerkezete egyben maradjon: a soronkénti hookban az értéket, a láblécoszlop hookjában a hozzá tartozó tartalmat írd ki.

```php
function pelda_rcp_levels_page_table_column( $level_id ) {
	echo esc_html( 'Szint: ' . $level_id );
}
add_action( 'rcp_levels_page_table_column', 'pelda_rcp_levels_page_table_column' );

function pelda_rcp_levels_below_table() {
	echo '<p>' . esc_html__( 'Ez a szöveg a táblázat alatt jelenik meg.', 'mytheme' ) . '</p>';
}
add_action( 'rcp_levels_below_table', 'pelda_rcp_levels_below_table' );
```
