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 folytatása. A hookok teljes listája az Akciók és szűrők áttekintő listája 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
Szekció neve “E-mailek”rcp_email_settings
Szekció neve “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.
/** * 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
Szekció neve “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.
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}.phpbody-{sablonkulcs}.phpfooter-{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 fejezetet.
Regisztrációs űrlap feldolgozása
Szekció neve “Regisztrációs űrlap feldolgozása”rcp_form_errors
Szekció neve “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$customerobjektumot is átadja, de a példa csak a$postedtö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:
/** * 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), az egyedi regisztrációs mezők létrehozása a Regisztrációs űrlap fejezetben.
rcp_form_processing
Szekció neve “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ó
Szekció neve “Fizetési átjáró”rcp_gateway_{átjáró azonosítója}
Szekció neve “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 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 fejezet ad útmutatót.
Szintváltás
Szekció neve “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 írja le.
rcp_get_membership_upgrade_paths
Szekció neve “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. |
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)
Szekció neve “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
Szekció neve “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. |
// Senki sem kap szintváltási lehetőséget.add_filter( 'rcp_has_upgrade_path', '__return_false' );Fizetés
Szekció neve “Fizetés”rcp_insert_payment (elavult)
Szekció neve “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 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):
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
Szekció neve “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.
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' );Készült: