# Akciók és szűrők: tagságok, beállítások, jelszóűrlap, fizetések oldala

> Tizenkét hook paraméterekkel és példákkal: új és megújított tagság, a tagságok táblázata, a beállítóoldalak saját mezői, a korlátozás-metabox típusai, a jelszóűrlap hibái, a fizetés állapotának felirata és a fizetések oldala.

Ez a fejezet az [előző hookfejezet](https://hub.hellowp.io/hu/plugins/learndash-restrict-content-pro/fejlesztok-hookok-tagsag-szurok/) 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, például `add_action( 'rcp_membership_post_renew', 'fuggveny', 10, 3 )`. A szűrőnek mindig vissza kell adnia az (esetleg módosított) első paramétert.

## Tagságok

### `rcp_new_membership_added`

Akció. Akkor fut le, amikor új tagság jön létre, szintemelésnél és szintcsökkentésnél is. Fontos, hogy a tagságrekord **létrejöttekor** indul, nem az aktiváláskor. Ha a tagság „függőben” (`pending`) állapotban jön létre, a hook akkor is lefut, ezért ne feltételezd, hogy a tagság már aktív.

Ha a kódodnak csak aktiváláskor kell futnia, használd inkább az `rcp_transition_membership_status_active` vagy az `rcp_membership_post_activate` hookot.

| Paraméter | Típus | Jelentés |
|---|---|---|
| `$membership_id` | egész | Az új tagságrekord azonosítója. |
| `$data` | tömb | A tagságrekord létrehozásához használt adatok. |

```php
function mytheme_rcp_new_membership_added( $membership_id, $data ) {
	$membership = rcp_get_membership( $membership_id );
	if ( $membership ) {
		error_log( 'Új tagság jött létre: ' . $membership_id );
	}
}
add_action( 'rcp_new_membership_added', 'mytheme_rcp_new_membership_added', 10, 2 );
```

### `rcp_membership_post_renew`

Akció. A tagság megújítása után fut le, az automatikus és a kézi megújításnál is. Az első aktiváláskor nem indul el, ahhoz az `rcp_membership_post_activate` való.

| Paraméter | Típus | Jelentés |
|---|---|---|
| `$expiration` | szöveg | A tagság új lejárati dátuma MySQL formátumban. |
| `$membership_id` | egész | A tagság azonosítója. |
| `$membership` | `RCP_Membership` | A tagság objektuma. |

```php
function mytheme_rcp_membership_post_renew( $expiration, $membership_id, $membership ) {
	error_log( sprintf( 'A(z) %d tagság megújult, új lejárat: %s', $membership_id, $expiration ) );
}
add_action( 'rcp_membership_post_renew', 'mytheme_rcp_membership_post_renew', 10, 3 );
```

Kapcsolódó: `rcp_membership_pre_renew`, `rcp_membership_post_activate`.

## A tagságok táblázata

A **Restrict → Memberships** oldal táblázatának oszlopait két szűrővel alakíthatod. Az első az oszlopokat adja meg, a második az egyes cellák tartalmát. A teljes, lépésenkénti példa a [Kódpéldák](https://hub.hellowp.io/hu/plugins/learndash-restrict-content-pro/fejlesztok-altalanos-kodpeldak/) fejezetben van.

![A Restrict → Memberships oldal táblázata egy tagsággal](./kepek/fejlesztok-hookok-7-tagsagok.webp)

*A Restrict → Memberships oldal táblázata egy tagsággal* (https://minta-bolt.hu/wp-admin/admin.php?page=rcp-members)

A képen a táblázat alapértelmezett oszlopai látszanak: **Customer**, **Membership**, **Status**, **Recurring**, **Created** és **Expiration**. Ezeket módosítják az alábbi szűrők.

### `rcp_memberships_list_table_columns`

Szűrő. A tagságok táblázatának oszlopait módosítja: hozzáadhatsz, átnevezhetsz vagy eltávolíthatsz oszlopot.

| Paraméter | Típus | Jelentés |
|---|---|---|
| `$columns` | tömb | Az oszlopkulcsok és az oszlopnevek tömbje. |

```php
function mytheme_rcp_memberships_columns( $columns ) {
	$columns['company'] = __( 'Cég', 'mytheme' );
	return $columns;
}
add_filter( 'rcp_memberships_list_table_columns', 'mytheme_rcp_memberships_columns' );
```

### `rcp_memberships_list_table_column_{column}`

Szűrő. Egy oszlop cellájának értékét adja meg. A `{column}` helyére az oszlop kulcsa kerül, így az új `company` oszlophoz az `rcp_memberships_list_table_column_company` szűrő tartozik.

| Paraméter | Típus | Jelentés |
|---|---|---|
| `$value` | vegyes | A cellában megjelenő érték. |
| `$membership` | `RCP_Membership` | A sorhoz tartozó tagság objektuma. |

```php
function mytheme_rcp_memberships_column_company( $value, $membership ) {
	return esc_html( get_user_meta( $membership->get_user_id(), 'company', true ) );
}
add_filter( 'rcp_memberships_list_table_column_company', 'mytheme_rcp_memberships_column_company', 10, 2 );
```

## Beállítások és korlátozás-metabox

### `rcp_messages_settings`

Akció. Saját beállítást vehetsz fel a **Restrict → Settings → General** oldalon, a korlátozott tartalom üzenetét tartalmazó rész alá (az üzenetek közé, a **Restricted Content Message** mező után).

- Paraméter: `$rcp_options`, a bővítmény beállításainak tömbje.

A beviteli mező nevének `rcp_settings[kulcs]` formájúnak kell maradnia, mert a bővítmény így menti el a saját beállításai mellett.

```php
function mytheme_rcp_messages_settings( $rcp_options ) {
	$value = isset( $rcp_options['your_custom_setting'] ) ? $rcp_options['your_custom_setting'] : '';
	?>
	<tr valign="top">
		<th>
			<label for="rcp_settings[your_custom_setting]"><?php esc_html_e( 'Saját beállítás', 'mytheme' ); ?></label>
		</th>
		<td>
			<input
				class="regular-text"
				id="rcp_settings[your_custom_setting]"
				name="rcp_settings[your_custom_setting]"
				type="text"
				value="<?php echo esc_attr( $value ); ?>"
			/>
			<p class="description"><?php esc_html_e( 'Ide jön a leírás.', 'mytheme' ); ?></p>
		</td>
	</tr>
	<?php
}
add_action( 'rcp_messages_settings', 'mytheme_rcp_messages_settings' );
```

### `rcp_misc_settings`

Akció. Ugyanúgy működik, mint az `rcp_messages_settings`, de a **Restrict → Settings → Misc** oldalra teszi a saját beállításodat. Paramétere szintén `$rcp_options`, és a mező nevének itt is `rcp_settings[kulcs]` alakúnak kell lennie, hogy a bővítmény a többi beállítással együtt mentse.

```php
function mytheme_rcp_misc_settings( $rcp_options ) {
	$value = isset( $rcp_options['your_custom_setting'] ) ? $rcp_options['your_custom_setting'] : '';
	?>
	<tr valign="top">
		<th>
			<label for="rcp_settings[your_custom_setting]"><?php esc_html_e( 'Saját beállítás', 'mytheme' ); ?></label>
		</th>
		<td>
			<input class="regular-text" id="rcp_settings[your_custom_setting]" name="rcp_settings[your_custom_setting]" type="text" value="<?php echo esc_attr( $value ); ?>" />
			<p class="description"><?php esc_html_e( 'Ide jön a leírás.', 'mytheme' ); ?></p>
		</td>
	</tr>
	<?php
}
add_action( 'rcp_misc_settings', 'mytheme_rcp_misc_settings' );
```

### `rcp_metabox_post_types`

Szűrő. A „tartalom korlátozása” metabox alapból minden nyilvános tartalomtípushoz megjelenik. Ha egy másik típushoz is szeretnéd, add hozzá a típus nevét a tömbhöz.

| Paraméter | Típus | Jelentés |
|---|---|---|
| `$post_types` | tömb | Azoknak a tartalomtípusoknak a nevei, amelyeknél a metabox megjelenik. |

```php
function mytheme_rcp_metabox_post_types( $post_types ) {
	$post_types[] = 'post_type_name';
	return $post_types;
}
add_filter( 'rcp_metabox_post_types', 'mytheme_rcp_metabox_post_types' );
```

## Jelszóűrlap

### `rcp_password_form_errors`

Akció. A jelszómódosítás feldolgozásakor fut le, miután a bővítmény a beépített ellenőrzésekkel megnézte, hogy üres-e a mező és egyezik-e a két jelszó, de még azelőtt, hogy az új jelszót elmentené.

Hibát az `rcp_errors()->add( $code, $message, 'password' )` hívással adhatsz hozzá. Ha marad hiba, a bővítmény nem frissíti a jelszót.

| Paraméter | Típus | Jelentés |
|---|---|---|
| `$posted_data` | tömb | A jelszómódosító kérés nyers `$_POST` adata. |

```php
function mytheme_rcp_password_form_errors( $posted_data ) {
	if ( ! empty( $posted_data['rcp_user_pass'] ) && false !== strpos( $posted_data['rcp_user_pass'], ' ' ) ) {
		rcp_errors()->add(
			'password_has_spaces',
			__( 'A jelszó nem tartalmazhat szóközt.', 'mytheme' ),
			'password'
		);
	}
}
add_action( 'rcp_password_form_errors', 'mytheme_rcp_password_form_errors' );
```

Kapcsolódó: `rcp_before_password_form_errors` (a beépített ellenőrzések előtt fut, lásd az [űrlap-hookok fejezetet](https://hub.hellowp.io/hu/plugins/learndash-restrict-content-pro/fejlesztok-hookok-urlapok-es-fizetes-2/)), `[password_form]` rövidkód.

## Fizetések

### `rcp_payment_status_label`

Szűrő. A fizetés állapotának feliratát módosítja (például „Complete”, „Pending”, „Refunded”). Ez a felirat három helyen jelenik meg: a `[subscription_details]` rövidkód fizetési táblázatában, a fizetés számláján és az adminisztrációs fizetéstáblázatban a **Restrict → Payments** oldalon.

| Paraméter | Típus | Jelentés |
|---|---|---|
| `$label` | szöveg | A megjelenő felirat, például „Complete”, „Pending” vagy „Refunded”. |
| `$status` | szöveg | A fizetés állapotának kulcsa, például `complete`, `pending` vagy `refunded`. |
| `$payment` | objektum | A fizetés adatbázisbeli objektuma. |

```php
function mytheme_rcp_payment_status_label( $label, $status, $payment ) {
	if ( 'complete' === $status ) {
		return __( 'Kifizetve', 'mytheme' );
	}
	return $label;
}
add_filter( 'rcp_payment_status_label', 'mytheme_rcp_payment_status_label', 10, 3 );
```

### A fizetések oldalának hookjai

A **Restrict → Payments** oldal táblázatán három akcióval bővíthetsz tartalmat.

![A Restrict → Payments oldal a fizetések táblázatával](./kepek/fejlesztok-hookok-7-fizetesek.webp)

*A Restrict → Payments oldal a fizetések táblázatával* (https://minta-bolt.hu/wp-admin/admin.php?page=rcp-payments)

A képen a fizetések táblázata látszik a szűrőkkel (átjáró, típus, tagsági szint, dátumtartomány). A táblázat alatti rész és az új oszlopok az alábbi hookokkal bővíthetők.

| Hook | Típus | Mit csinál | Paraméter |
|---|---|---|---|
| `rcp_payments_page_bottom` | akció | Tartalmat ír a fizetések oldalának aljára. | nincs |
| `rcp_payments_page_table_column` | akció | Tartalmat ad egy új oszlopba a fizetések táblázatában. | `$payment_id`: a megjelenített fizetés azonosítója |
| `rcp_payments_page_table_footer` | akció | Új oszlopot ad a táblázat láblécéhez. | nincs |

```php
function mytheme_rcp_payments_page_bottom() {
	echo '<p>' . esc_html__( 'A fizetésekkel kapcsolatos megjegyzések.', 'mytheme' ) . '</p>';
}
add_action( 'rcp_payments_page_bottom', 'mytheme_rcp_payments_page_bottom' );
```

Ha a táblázatban saját oszlopot szeretnél, az `rcp_payments_page_table_column` az oszlop cellájának tartalmát írja ki, az `rcp_payments_page_table_footer` pedig a hozzá tartozó láblécmezőt.
