# Akciók és szűrők: emlékeztetők, korlátozott tartalom üzenete, átirányítás, tagság állapota, Stripe

> Tizenkét akció és szűrő: az emlékeztető e-mailek időpontjai és lekérdezése, e-mail-ellenőrzés, a korlátozott tartalom üzenete és átirányítása, regisztráció utáni cím, állapotváltás, szintek listája és a Stripe Checkout adatai.

Ez a fejezet a hookfejezetek sorát folytatja. 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.

## Lejárati és megújítási emlékeztetők

### `rcp_reminder_notice_periods`

Szűrő. A lejárati és megújítási emlékeztetők beállításánál választható időszakok listáját módosítja (például „egy hónappal előtte”, „két nappal előtte”).

- `$periods` (tömb): az elérhető időszakok. A kulcs PHP által értelmezhető időformátum: a `+2days` a lejárat előtti két napot, a `-1week` a lejárat utáni egy hetet jelenti. Az érték a felületen látszó felirat.

Az alapértelmezett időszakok:

| Kulcs | Jelentés |
|---|---|
| `today` | a megújítás vagy lejárat napján |
| `+1day` … `+6days` | egy-hat nappal előtte |
| `+1week`, `+2weeks`, `+3weeks` | egy, két, három héttel előtte |
| `+1month`, `+2months`, `+3months` | egy, két, három hónappal előtte |
| `-1day`, `-2days`, `-3days` | egy-három nappal a lejárat után |
| `-1week`, `-2weeks` | egy, két héttel a lejárat után |
| `-1month`, `-2months`, `-3months` | egy, két, három hónappal a lejárat után |

- Paraméter: `$periods`.

Példa: új időszak, a lejárat utáni negyedik nap.

```php
function mytheme_rcp_reminder_four_days_after( $periods ) {
	$periods['-4days'] = __( 'Négy nappal a lejárat után', 'mytheme' );
	return $periods;
}
add_filter( 'rcp_reminder_notice_periods', 'mytheme_rcp_reminder_four_days_after' );
```

### `rcp_reminder_subscription_args`

Szűrő. Azoknak a tagságoknak a lekérdezési argumentumait módosítja, amelyeknek az emlékeztető e-mailt küldi a bővítmény.

- `$args` (tömb): a lekérdezés argumentumai. Az elfogadott értékek ugyanazok, mint az `rcp_get_memberships()` függvénynél.
- `$period` (szöveg): az emlékeztető időszaka, például a `+1 month` az egy hónappal a lejárat előtti emlékeztetőt jelenti.
- `$type` (szöveg): az emlékeztető fajtája, `renewal` (megújítás) vagy `expiration` (lejárat).

## Regisztráció

### `rcp_require_email_verification`

Szűrő. Eldönti, kell-e e-mail-cím ellenőrzése a tagsági regisztráció feldolgozásakor.

- `$required` (logikai): kell-e az ellenőrzés ennél a regisztrációnál.
- `$posted` (tömb): a regisztrációs űrlapról elküldött értékek.
- `$user_id` (egész): a regisztráló felhasználó azonosítója.
- `$price` (szám): a tagsági szint ára, amelyre a felhasználó regisztrál.

Példa: az ellenőrzés csak 50 egységnél olcsóbb szintnél kötelező, az ennél drágább szintnél nem.

```php
function mytheme_rcp_require_email_verification( $required, $posted, $user_id, $price ) {
	if ( $price >= 50 ) {
		return false;
	}
	return true;
}
add_filter( 'rcp_require_email_verification', 'mytheme_rcp_require_email_verification', 10, 4 );
```

### `rcp_return_url`

Szűrő. Azt a címet módosítja, ahová a felhasználó a sikeres regisztráció után kerül.

- `$redirect` (szöveg): a cím, ahová a bővítmény átirányít.
- `$user_id` (egész): a regisztráló felhasználó azonosítója.

### `rcp_validate_username`

Szűrő. Azt dönti el, hogy a megadott felhasználónév érvényes-e. A bővítmény az új felhasználói fiók létrehozásakor, a regisztráció közben futtatja. Ha az érték `false`, hibaüzenet jelenik meg a regisztrációs űrlapon.

- `$is_valid` (logikai): érvényes-e a megadott felhasználónév.
- `$username` (szöveg): a vásárló által megadott felhasználónév.

Példa: az „admin” kezdetű felhasználónevet nem engedjük regisztrálni.

```php
function mytheme_rcp_validate_username( $is_valid, $username ) {
	if ( 0 === strpos( strtolower( $username ), 'admin' ) ) {
		return false;
	}
	return $is_valid;
}
add_filter( 'rcp_validate_username', 'mytheme_rcp_validate_username', 10, 2 );
```

### `rcp_verification_redirect_url`

Szűrő. Azt a címet módosítja, ahová a tag az e-mail-címe megerősítése után kerül. Alapesetben ez a **Restrict → Settings → General** oldalon megadott **Fiókoldal**.

- `$redirect_url` (szöveg): az alapértelmezett cím, vagyis a fiókoldal címe.
- `$member` (`RCP_Member`): az e-mail-címét megerősítő felhasználó tagobjektuma.

```php
function mytheme_rcp_verification_redirect_url( $redirect_url, $member ) {
	return home_url( '/koszonjuk/' );
}
add_filter( 'rcp_verification_redirect_url', 'mytheme_rcp_verification_redirect_url', 10, 2 );
```

### `rcp_show_subscription_level`

Szűrő. Eldönti, hogy egy tagsági szint megjelenjen-e a `[register_form]` rövidkód szintválasztó listájában.

- `$show` (logikai): megjelenjen-e a szint (`true` vagy `false`).
- `$level_id` (egész): a most vizsgált szint azonosítója.
- `$user_id` (egész): az űrlapot néző felhasználó azonosítója, bejelentkezés nélkül 0.

Példa: az 1-es szint nem látszik annak, aki a 3-as szinten van.

```php
function mytheme_rcp_show_subscription_level( $show, $level_id, $user_id ) {
	if ( 1 == $level_id && 3 == rcp_get_subscription_id( $user_id ) ) {
		$show = false;
	}
	return $show;
}
add_filter( 'rcp_show_subscription_level', 'mytheme_rcp_show_subscription_level', 10, 3 );
```

## Korlátozott tartalom

### `rcp_restricted_message`

Szűrő. A bejegyzésnél megjelenő korlátozási üzenetet módosítja, ha a látogatónak nincs hozzáférése. Ezt a szűrőt az `rcp_format_teaser()` függvény hívja, amely az üzenet elé szükség esetén a kivonatot is beteszi.

- `$message` (szöveg): az ingyenes vagy fizetett korlátozás üzenete, a bejegyzés fajtájától függően. Ez a **Korlátozás → Beállítások → Általános** oldalon megadott szöveg, vagy az alapértelmezett, például „Ez a tartalom csak előfizetőknek érhető el”.

Példa: más üzenet fizetős és ingyenes tartalomhoz.

```php
function mytheme_rcp_restricted_message( $message ) {
	global $post;
	if ( rcp_is_paid_content( $post->ID ) ) {
		$message = __( 'Ehhez fizetett tagság kell.', 'mytheme' );
	} else {
		$message = __( 'Ehhez ingyenes tagság kell.', 'mytheme' );
	}
	return $message;
}
add_filter( 'rcp_restricted_message', 'mytheme_rcp_restricted_message' );
```

### `rcp_restricted_content_message`

Szűrő. A „ez a tartalom korlátozott” üzenetet módosítja, amelyet a jogosulatlan látogatók látnak. Az `rcp_restricted_message` szűrőhöz hasonló, de van különbség:

- az `rcp_restricted_message` az `rcp_format_teaser()` hívásakor fut, amely az üzenet elé a kivonatot is teheti;
- az `rcp_restricted_content_message` az `rcp_get_restricted_content_message()` hívásakor fut, amelynek egyetlen feladata az üzenet lekérése.

A függvényben elérhető a globális `$post`, így az üzenet a bejegyzés azonosítójától vagy típusától függően is változtatható.

- `$message` (szöveg): a megjelenő üzenet.

Példa: egyedi üzenet egy saját bejegyzéstípushoz.

```php
function mytheme_rcp_restricted_content_message( $message ) {
	global $post;
	if ( ! $post instanceof WP_Post ) {
		return $message;
	}
	if ( 'my_post_type' === $post->post_type ) {
		$message = __( 'Egyedi üzenet az egyedi bejegyzéstípushoz.', 'mytheme' );
	}
	return $message;
}
add_filter( 'rcp_restricted_content_message', 'mytheme_rcp_restricted_content_message' );
```

### `rcp_restricted_post_redirect_url`

Szűrő. Azt a címet módosítja, ahová a jogosulatlan látogatót a bővítmény átirányítja, ha korlátozott bejegyzést akar megnyitni.

- `$redirect_url` (szöveg): az átirányítás címe.
- `$member` (`RCP_Member`): az átirányított felhasználó tagobjektuma.
- `$post` (`WP_Post`): a bejegyzés, amelyet a felhasználó meg akart nyitni.

## Tagság állapota

### `rcp_set_membership_status_value`

Szűrő. Akkor fut, amikor egy tagság állapota változni készül, és az új állapot értékét az adatbázisba írás előtt módosíthatod.

- `$new_status` (szöveg): a beállítandó új állapot (`active`, `expired` stb.).
- `$old_status` (szöveg): a változás előtti állapot. Pontosan ez a jelenlegi állapot, mert a módosítás még nem történt meg.
- `$membership_id` (egész): a módosított tagság azonosítója.
- `$membership` (`RCP_Membership`): a tagság objektuma.

### `rcp_set_status`

Akció. **Elavult**, helyette az `rcp_transition_membership_status` akciót használd. Akkor fut, amikor a felhasználó állapota beáll (függőben, ingyenes, aktív, lejárt, lemondott).

- `$new_status` (szöveg): az új állapot (`pending`, `free`, `active`, `expired`, `canceled`).
- `$user_id` (egész): az érintett felhasználó azonosítója.
- `$old_status` (szöveg): az előző állapot.
- `$member` (`RCP_Member`): a felhasználó tagobjektuma.

Ugyanekkor lefut egy dinamikus akció is, `rcp_set_status_{$new_status}` néven (például `rcp_set_status_active`). Ugyanazt tudja, de az új állapot a hook nevében van, nem paraméterben, ezért eggyel kevesebb paramétert kap (`$user_id`, `$old_status`, `$member`). A két példa ugyanazt éri el:

```php
function mytheme_rcp_set_status( $new_status, $user_id, $old_status, $member ) {
	if ( 'active' == $new_status ) {
		// Ide jön a kód, amely az „active” állapotnál fut.
	}
}
add_action( 'rcp_set_status', 'mytheme_rcp_set_status', 10, 4 );

function mytheme_rcp_set_status_active( $user_id, $old_status, $member ) {
	// Ide jön a kód, amely az „active” állapotnál fut.
}
add_action( 'rcp_set_status_active', 'mytheme_rcp_set_status_active', 10, 3 );
```

Az `rcp_set_status_active` jó választás, ha a tagság aktiválása után azonnal kell kódot futtatnod. Figyelj rá, hogy megújításnál és szintváltásnál is lefuthat. Ha a kódnak csak egyszer szabad lefutnia, jelöld meg felhasználói metaadattal, hogy már megtörtént:

```php
function mytheme_rcp_set_status_active( $user_id, $old_status, $member ) {
	$has_completed = get_user_meta( $user_id, 'rcp_has_completed_some_custom_action', true );
	if ( $has_completed ) {
		// Ezt a felhasználónál már elvégeztük.
		return;
	}

	// Ide jön az egyszer futó kód.

	update_user_meta( $user_id, 'rcp_has_completed_some_custom_action', true );
}
add_action( 'rcp_set_status_active', 'mytheme_rcp_set_status_active', 10, 3 );
```

## Stripe Checkout

A két szűrő ugyanazt csinálja, de más rövidkódhoz tartozik: ha a `[register_form_stripe]` rövidkódot használod, az `rcp_stripe_checkout_data` kell, ha a szokásos `[register_form]` rövidkódot, az `rcp_stripe_checkout_form_data`.

### `rcp_stripe_checkout_data`

Szűrő. A Stripe Checkout argumentumait módosítja, ha a `[register_form_stripe]` rövidkódot használod. Segítségével a beállítási lehetőségek átírhatók.

- `$data` (tömb): a Stripe-nak küldött alapértelmezett argumentumok.

Példa: a számlázási cím bekérése.

```php
function mytheme_rcp_stripe_checkout_form_billing_address( $data ) {
	$data['data-billing-address'] = true;
	return $data;
}
add_filter( 'rcp_stripe_checkout_data', 'mytheme_rcp_stripe_checkout_form_billing_address' );
```

### `rcp_stripe_checkout_form_data`

Szűrő. A Stripe Checkout argumentumait módosítja, ha a szokásos `[register_form]` rövidkódot használod.

- `$data` (tömb): a Stripe-nak küldött alapértelmezett beállítások.

Példa: a számlázási cím bekérése.

```php
function mytheme_rcp_stripe_checkout_billing_address( $data ) {
	$data['billing-address'] = true;
	return $data;
}
add_filter( 'rcp_stripe_checkout_form_data', 'mytheme_rcp_stripe_checkout_billing_address' );
```
