Tovább a tartalomhoz

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.

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' );

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}.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 fejezetet.

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:

/**
* 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.

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).

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.

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.

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 );

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.

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' );

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 );

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:

Tiszteletben tartjuk a magánszférádat

Sütiket használunk a böngészési élmény javítására és a forgalom elemzésére. Az analitika csak akkor indul, ha engeded. Adatvédelmi irányelvek, Sütitájékoztató.

Sütibeállítások