# Akciók és szűrők: Stripe-argumentumok, regisztráció, állapotváltás, fizetés, profil

> Tizenkét akció és szűrő paraméterekkel és példákkal: a Stripe-hívások argumentumai, a gateway-nek küldött előfizetési adat, sikeres regisztráció, tagság- és fizetésállapot-váltás, lejárt tagság szűrője, profilmentés.

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.

## Stripe

### `rcp_stripe_checkout_subscription_data`

Szűrő. A Stripe Checkoutnak átadott előfizetési adatokat módosítja. A szűrt érték egy tömb: a kulcs a tagsági szint azonosítója, az érték pedig egy újabb tömb a szint nevével (`name`), leírásával (`description`) és a fizetőgomb feliratával (`panelLabel`). A felirat alapértelmezetten „Regisztráció”, próbaidőszaknál „Próba indítása”.

A példa minden szintnél átírja a gomb feliratát:

```php
function pelda_rcp_stripe_checkout_subscription_data( $subscriptions ) {
	foreach ( $subscriptions as $sub_id => $sub_data ) {
		$subscriptions[ $sub_id ]['panelLabel'] = __( 'Regisztráció vagy megújítás', 'rcp' );
	}

	return $subscriptions;
}
add_filter( 'rcp_stripe_checkout_subscription_data', 'pelda_rcp_stripe_checkout_subscription_data' );
```

### `rcp_stripe_create_payment_intent_args`

Szűrő. A Stripe fizetési szándék (Payment Intent) létrehozásakor küldött argumentumokat módosítja. Az elfogadott argumentumokat a Stripe API leírása sorolja fel.

| Paraméter | Típus | Jelentés |
|---|---|---|
| `$intent_args` | tömb | A fizetési szándék argumentumai az API-kéréshez. |
| `$gateway` | `RCP_Payment_Gateway_Stripe` | A fizetési átjáró objektuma. |

A példa megakadályozza, hogy a kártya adatai a Stripe-ban későbbi használatra elmentődjenek:

```php
/**
 * Ne mentse el a kártyaadatokat a Stripe-ban későbbi használatra.
 *
 * @param array                      $intent_args
 * @param RCP_Payment_Gateway_Stripe $stripe_gateway
 *
 * @return array
 */
function pelda_rcp_ne_mentse_a_kartyat( array $intent_args, RCP_Payment_Gateway_Stripe $stripe_gateway ) {
	unset( $intent_args['setup_future_usage'] );

	return $intent_args;
}
add_filter( 'rcp_stripe_create_payment_intent_args', 'pelda_rcp_ne_mentse_a_kartyat', 10, 2 );
```

### `rcp_stripe_create_subscription_args`

Szűrő. A Stripe-ban új előfizetés létrehozásakor használt argumentumokat módosítja.

| Paraméter | Típus | Jelentés |
|---|---|---|
| `$args` | tömb | Az alapértelmezett argumentumok (lásd alább). |
| `$stripe_gateway` | `RCP_Payment_Gateway_Stripe` | A fizetési átjáró objektuma. |

Az `$args` tömb elemei:

| Elem | Típus | Jelentés |
|---|---|---|
| `plan` | szöveg | A Stripe-terv azonosítója. |
| `prorate` | logikai | Jóváírja-e a fel nem használt időt. Ajánlott érték: `false`, mert az arányosítást a bővítmény maga kezeli. |
| `metadata` | tömb | Tartalma: `rcp_subscription_level_id` (a tagsági szint azonosítója, egész szám) és `rcp_member_id` (a felhasználó azonosítója, egész szám). |
| `coupon` | szöveg | Csak kedvezménykód használatakor van benne. |
| `trial_end` | egész szám | A próbaidőszak végének időbélyege. |

A `trial_end` értéke a bővítmény 3.2-es változatától mást jelent: a kezdeti fizetés mindig egyszeri tranzakcióként történik, és a bővítmény a `trial_end` paraméterrel adja meg az előfizetés kezdetét, vagyis a következő (első ismétlődő) fizetés napját.

### `rcp_stripe_customer_create_args`

Szűrő. A Stripe-ügyfélrekord létrehozásakor küldött argumentumokat módosítja. Az elfogadott argumentumokat a Stripe API leírása sorolja fel.

| Paraméter | Típus | Jelentés |
|---|---|---|
| `$customer_args` | tömb | Az API-kérés argumentumai. |
| `$gateway` | `RCP_Payment_Gateway_Stripe` | A fizetési átjáró objektuma. |

## Regisztráció

### `rcp_subscription_data`

Szűrő. A fizetési átjárónak küldött előfizetési adatokat módosítja. A `$subscription_data` tömb elemei:

| Elem | Típus | Jelentés |
|---|---|---|
| `price` | tört szám | A ma fizetendő alapár, a regisztrációs díj nélkül. |
| `recurring_price` | tört szám | Az ismétlődő fizetés összege. |
| `discount` | tört szám | A fizetésre alkalmazott kedvezmények összege. |
| `discount_code` | szöveg | A regisztrációnál használt kedvezménykód. |
| `fee` | tört szám | A kezdeti árra rakódó díjak összege. |
| `length` | egész szám | Az előfizetés hossza számmal. |
| `length_unit` | szöveg | A hossz egysége (`day`, `month`, `year`). |
| `subscription_id` | egész szám | A tagsági szint azonosítója. |
| `subscription_name` | szöveg | A tagsági szint neve. |
| `key` | szöveg | Az előfizetés kulcsa. |
| `user_id` | egész szám | A regisztráló WordPress-felhasználó azonosítója. |
| `user_name` | szöveg | A regisztráló felhasználó belépési neve. |
| `email` | szöveg | A regisztráló felhasználó e-mail-címe. |
| `currency` | szöveg | A pénznem kódja (például `HUF`). |
| `auto_renew` | logikai | Be van-e kapcsolva az automatikus megújítás. |
| `return_url` | szöveg | A sikeres regisztráció utáni átirányítás címe. |
| `new_user` | logikai | Létrejött-e új felhasználói fiók a regisztrációhoz. |
| `trial_duration` | egész szám | A próbaidőszak hossza (0, ha nincs). |
| `trial_duration_unit` | szöveg | A próbaidőszak egysége (`day`, `month`, `year`). |
| `trial_eligible` | logikai | Jogosult-e a felhasználó ingyenes próbára. Ha nem, a szint árát azonnal fizetnie kell. |
| `post_data` | tömb | A regisztrációs űrlapon elküldött összes adat. |

### `rcp_successful_registration`

Akció. Akkor fut, amikor a felhasználó feliratkozik egy tagsági szintre. Lefut új regisztrációnál, kézi megújításnál, szintemelésnél és szintcsökkentésnél is, de **az automatikus megújításnál nem**.

| Paraméter | Típus | Jelentés |
|---|---|---|
| `$member` | `RCP_Member` | A tag objektuma. |
| `$customer` | `RCP_Customer` | Az ügyfél objektuma. |
| `$membership` | `RCP_Membership` | A tagság objektuma. |

A példa extra levelet küld azoknak az új tagoknak, akik az 1., 2. vagy 3. azonosítójú szintre regisztráltak:

```php
/**
 * Extra követő e-mail küldése az 1., 2. vagy 3. szintre regisztráló tagoknak.
 *
 * @param RCP_Member     $member
 * @param RCP_Customer   $customer
 * @param RCP_Membership $membership
 *
 * @return void
 */
function pelda_rcp_regisztracio_utan( $member, $customer, $membership ) {
	// Azok a szintazonosítók, amelyekre a kódnak futnia kell. Írd át a sajátjaidra.
	$szintek = array( 1, 2, 3 );

	// Ha nem ezek valamelyikén van, nem csinál semmit.
	if ( ! in_array( $membership->get_object_id(), $szintek ) ) {
		return;
	}

	$subject = __( 'További adatokat kérünk', 'rcp' );
	$message = __( 'Ide írd az e-mail szövegét.', 'rcp' );

	$emails            = new RCP_Emails;
	$emails->member_id = $member->ID;
	$emails->send( $member->user_email, $subject, $message );
}
add_action( 'rcp_successful_registration', 'pelda_rcp_regisztracio_utan', 10, 3 );
```

## Tagság állapotának váltása

### `rcp_transition_membership_status`

Akció. Minden alkalommal lefut, amikor egy tagság állapota megváltozik.

| Paraméter | Típus | Jelentés |
|---|---|---|
| `$old_status` | szöveg | A korábbi állapot. |
| `$new_status` | szöveg | Az új állapot. |
| `$membership_id` | egész szám | A tagság azonosítója. |

### `rcp_transition_membership_status_{állapot}`

Akció. Akkor fut le, amikor egy tagság állapota megváltozik, és a hook neve az új állapot azonosítóját tartalmazza. Például:

- `rcp_transition_membership_status_active`
- `rcp_transition_membership_status_expired`
- `rcp_transition_membership_status_cancelled`
- `rcp_transition_membership_status_pending`

| Paraméter | Típus | Jelentés |
|---|---|---|
| `$old_status` | szöveg | A korábbi állapot. |
| `$membership_id` | egész szám | A tagság azonosítója. |

## Fizetések

### `rcp_update_payment`

Akció. Akkor fut, amikor egy fizetést frissíteni készül az adatbázisban. A frissítés **előtt** lép életbe.

| Paraméter | Típus | Jelentés |
|---|---|---|
| `$payment_id` | egész szám | A fizetési rekord azonosítója. |
| `$payment_data` | tömb | A frissítendő adatok. |

### `rcp_update_payment_status`

Akció. Akkor fut, amikor egy fizetés állapota frissül.

| Paraméter | Típus | Jelentés |
|---|---|---|
| `$status` | szöveg | Az új állapot: `pending`, `complete`, `failed`, `refunded`, `abandoned`. |
| `$payment_id` | egész szám | A fizetés azonosítója. |

Minden állapothoz külön akció is tartozik:

- `rcp_update_payment_status_complete`
- `rcp_update_payment_status_failed`
- `rcp_update_payment_status_refunded`
- `rcp_update_payment_status_abandoned`

Ezek csak egy paramétert kapnak: a fizetés azonosítóját.

## Lejárt tagság és profil

### `rcp_user_has_expired_membership`

Szűrő. Azt módosítja, hogy a megadott felhasználónak van-e legalább egy lejárt tagsága.

| Paraméter | Típus | Jelentés |
|---|---|---|
| `$has_expired_membership` | logikai | `true`, ha a felhasználónak van legalább egy lejárt tagsága, különben `false`. |
| `$user_id` | egész szám | Az ellenőrzött felhasználó azonosítója. |
| `$customer` | `RCP_Customer` vagy `false` | Az ügyfél objektuma, ha van; ha nincs, `false`. |

### `rcp_user_profile_updated`

Akció. Akkor fut, amikor a felhasználó az `[rcp_profile_editor]` rövidkóddal megjelenített űrlapon módosítja a profilját.

| Paraméter | Típus | Jelentés |
|---|---|---|
| `$user_id` | egész szám | A profilt szerkesztő felhasználó azonosítója. |
| `$userdata` | tömb | A beküldött `WP_User` mezők: `ID`, `first_name`, `last_name`, `display_name`, `user_email`. |
| `$old_data` | `WP_User` | A felhasználó objektuma a módosítás előtti állapotban. |

A példa egyéni profilmezőket ment el. Ugyanez a minta használható az egyéni regisztrációs mezőknél is:

```php
/**
 * Egyéni mezők mentése, amikor a tag módosítja a profilját.
 *
 * @param int     $user_id  A felhasználó azonosítója.
 * @param array   $userdata A beküldött felhasználói mezők.
 * @param WP_User $old_data A felhasználó a módosítás előtt.
 */
function pelda_rcp_profil_mentese( $user_id, $userdata = array(), $old_data = null ) {
	if ( ! empty( $_POST['rcp_foglalkozas'] ) ) {
		update_user_meta( $user_id, 'rcp_foglalkozas', sanitize_text_field( wp_unslash( $_POST['rcp_foglalkozas'] ) ) );
	}

	if ( ! empty( $_POST['rcp_helyszin'] ) ) {
		update_user_meta( $user_id, 'rcp_helyszin', sanitize_text_field( wp_unslash( $_POST['rcp_helyszin'] ) ) );
	}
}
add_action( 'rcp_user_profile_updated', 'pelda_rcp_profil_mentese', 10, 3 );
```
