Akciók és szűrők: bejelentkezés, régi tag-szűrők, táblázat-hookok
Tizenkét hook paraméterekkel és példákkal: a bejelentkezés ellenőrzése és átirányítása, a régi tagobjektum szűrői (hozzáférés, lejárat, megújítás, állapot, próbaidőszak, kártyafrissítés), a tagsági szintek és a tagok 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, például add_filter( 'rcp_member_can_access', 'fuggveny', 10, 4 ).
Bejelentkezés
Szekció neve “Bejelentkezés”rcp_login_form_errors
Szekció neve “rcp_login_form_errors”Akció. A bejelentkezés feldolgozása közben fut le, a beépített felhasználónév- és jelszóellenőrzés után, a wp_signon() hívás előtt. Egyedi ellenőrzést és hibaüzenetet adhatsz vele a bejelentkezéshez.
Hibát az rcp_errors()->add( $kod, $uzenet, 'login' ) hívással adhatsz hozzá. Ha a hook lefutása után van hiba, a bővítmény leáll, és nem próbálja meg a bejelentkeztetést.
| Paraméter | Típus | Jelentés |
|---|---|---|
$posted_data |
tömb | A bejelentkezési kérés nyers $_POST adata (például rcp_user_login, rcp_user_pass, rcp_user_remember). |
function mytheme_rcp_login_form_errors( $posted_data ) { if ( empty( $posted_data['rcp_user_login'] ) ) { return; }
$user = get_user_by( 'login', sanitize_user( wp_unslash( $posted_data['rcp_user_login'] ) ) ); if ( $user && ! user_can( $user, 'read' ) ) { rcp_errors()->add( 'login_not_allowed', __( 'A fiókoddal itt nem lehet bejelentkezni.', 'mytheme' ), 'login' ); }}add_action( 'rcp_login_form_errors', 'mytheme_rcp_login_form_errors' );Kapcsolódó hook: rcp_before_form_errors (ugyanebben a bejelentkezési kezelőben korábban fut).
rcp_login_redirect_url
Szekció neve “rcp_login_redirect_url”Szűrő. A [login_form] rövidkóddal végzett sikeres bejelentkezés utáni átirányítás címét módosíthatod vele.
| Paraméter | Típus | Jelentés |
|---|---|---|
$redirect |
szöveg | Az átirányítás címe. |
$user |
WP_User |
A bejelentkező felhasználó. |
Régi tagobjektum szűrői
Szekció neve “Régi tagobjektum szűrői”A következő szűrők az RCP_Member osztályhoz tartoznak. A 3.0-s verzió óta a tagság adatait az RCP_Membership osztály kezeli, ezért a legtöbb szűrő elavult, és megvan az új megfelelője. Új fejlesztésben az utódot használd.
| Szűrő | Állapot | Helyette |
|---|---|---|
rcp_member_calculated_expiration |
elavult | rcp_membership_calculated_expiration_date |
rcp_member_can_renew |
elavult | rcp_membership_can_renew |
rcp_member_get_status |
elavult | rcp_membership_get_status |
rcp_member_is_expired |
elavult | rcp_membership_is_expired vagy rcp_user_has_expired_membership |
rcp_member_post_renew (akció) |
elavult | rcp_membership_post_renew |
rcp_member_can_access |
nem elavultnak jelölt | |
rcp_member_has_trialed |
nem elavultnak jelölt | |
rcp_member_can_update_billing_card |
nem elavultnak jelölt |
rcp_member_can_access
Szekció neve “rcp_member_can_access”Szűrő. Eldönti, hogy egy felhasználó láthat-e egy bejegyzést. Ha false-t ad vissza, a korlátozott tartalomról szóló üzenet jelenik meg a bejegyzés megnyitásakor.
| Paraméter | Típus | Jelentés |
|---|---|---|
$can_access |
logikai | true, ha hozzáfér, false, ha nem. |
$member_id |
egész | Az ellenőrzött felhasználó azonosítója. |
$post_id |
egész | Az ellenőrzött bejegyzés azonosítója. |
$member |
RCP_Member |
A tagobjektum. |
A példa a post típusú bejegyzéseket csak a 2-es azonosítójú szint lejárat nélküli tagjainak engedi, az adminisztrátorok pedig mindig hozzáférnek:
function pelda_rcp_member_can_access( $can_access, $member_id, $post_id, $member ) { if ( 'post' === get_post_type( $post_id ) ) { if ( 2 === (int) $member->get_subscription_id() && ! $member->is_expired() ) { $can_access = true; } else { $can_access = false; }
if ( user_can( $member_id, 'manage_options' ) ) { $can_access = true; } }
return $can_access;}add_filter( 'rcp_member_can_access', 'pelda_rcp_member_can_access', 10, 4 );rcp_member_calculated_expiration
Szekció neve “rcp_member_calculated_expiration”Szűrő, elavult. Az RCP_Member::calculate_expiration() által számolt lejárati dátumot módosíthatod vele, általában közvetlenül a lejárat beállítása előtt. Jó például arra, hogy minden tagság a hónap utolsó napján járjon le, a feliratkozás napjától függetlenül.
| Paraméter | Típus | Jelentés |
|---|---|---|
$expiration |
szöveg | A számolt lejárat MySQL-formátumban (Y-m-d 23:59:59), vagy none, ha korlátlan. |
$user_id |
egész | Az a felhasználó, akinek a lejáratát számolják. |
$member |
RCP_Member |
A tagobjektum. |
A példa a lejáratot a számolt dátum hónapjának utolsó napjára teszi. Ha valaki 2017. július 15-én egy hónapos előfizetést vesz, a számolt lejárat augusztus 15., ezzel augusztus 31. lesz. Ha az aktuális hónap végét szeretnéd, a strtotime( $expiration ) helyett current_time( 'timestamp' ) kell.
function pelda_rcp_member_calculated_expiration( $expiration, $user_id, $member ) { if ( 'none' !== $expiration ) { $expiration = date( 'Y-m-t 23:59:59', strtotime( $expiration ) ); }
return $expiration;}add_filter( 'rcp_member_calculated_expiration', 'pelda_rcp_member_calculated_expiration', 10, 3 );A számolt lejárat módosítása nem változtatja meg a fizetési átjárónál tárolt megújítási dátumot. Automatikus megújítással ezért csak akkor érdemes együtt használni, ha az átjáró API-hívását is módosítod.
rcp_member_can_renew
Szekció neve “rcp_member_can_renew”Szűrő, elavult. Azt dönti el, hogy a tag megújíthatja-e az előfizetését. Alapesetben false, ha az előfizetés ingyenes, vagy ha a tagnak már van ismétlődő előfizetése aktív állapotban.
| Paraméter | Típus | Jelentés |
|---|---|---|
$can_renew |
logikai | Megújíthatja-e az előfizetését. |
$user_id |
egész | Az ellenőrzött felhasználó azonosítója. |
rcp_member_get_status
Szekció neve “rcp_member_get_status”Szűrő, elavult. Az RCP_Member::get_status() által visszaadott előfizetési állapotot módosíthatod vele.
| Paraméter | Típus | Jelentés |
|---|---|---|
$status |
szöveg | A tag aktuális állapota. |
$user_id |
egész | A felhasználó azonosítója. |
$member |
RCP_Member |
A tagobjektum. |
rcp_member_is_expired
Szekció neve “rcp_member_is_expired”Szűrő, elavult. Azt módosíthatod vele, hogy egy tag tagsága lejárt-e.
| Paraméter | Típus | Jelentés |
|---|---|---|
$is_expired |
logikai | Lejárt-e a tagság. |
$user_id |
egész | Az ellenőrzött felhasználó azonosítója. |
$member |
RCP_Member |
A tagobjektum. |
A példa a lejárat időpontját két órával eltolja: a tag csak akkor számít lejártnak, ha a lejárati ideje több mint két órája elmúlt.
function pelda_rcp_is_expired( $is_expired, $user_id, $member ) { if ( ! $is_expired ) { return $is_expired; }
$expiration = $member->get_expiration_date( false, false );
if ( $expiration && strtotime( '-2 hours', current_time( 'timestamp' ) ) > strtotime( $expiration, current_time( 'timestamp' ) ) ) { $is_expired = true; } else { $is_expired = false; }
return $is_expired;}add_filter( 'rcp_member_is_expired', 'pelda_rcp_is_expired', 10, 3 );rcp_member_post_renew
Szekció neve “rcp_member_post_renew”Akció, elavult. Az automatikus előfizetés-megújítás feldolgozása után fut le.
| Paraméter | Típus | Jelentés |
|---|---|---|
$user_id |
egész | A megújított felhasználói fiók azonosítója. |
$expiration |
szöveg | Az új lejárati dátum MySQL-formátumban. |
$member |
RCP_Member |
A tagobjektum. |
rcp_member_has_trialed
Szekció neve “rcp_member_has_trialed”Szűrő. Azt dönti el, hogy a tag korábban már igénybe vett-e próbaidőszakot. A bővítmény alapesetben felhasználónként egy próbaidőszakot enged, ezzel a szűrővel ez felülbírálható.
| Paraméter | Típus | Jelentés |
|---|---|---|
$has_trialed |
logikai | true, ha a tag már használt próbaidőszakot. |
$user_id |
egész | Az ellenőrzött felhasználó azonosítója. |
Ez a sor mindig false-t ad, így a felhasználó többször is feliratkozhat próbaidőszakra:
add_filter( 'rcp_member_has_trialed', '__return_false' );rcp_member_can_update_billing_card
Szekció neve “rcp_member_can_update_billing_card”Szűrő. Azt dönti el, hogy a felhasználó frissítheti-e a számlázási kártyáját az [rcp_update_card] rövidkóddal. Alapesetben true, ha:
- a felhasználó Stripe-pal fizetett, és kitöltött a fizetési profil azonosítója (
cus_kezdetű), vagy - PayPal-lal fizetett, a fizetési profil azonosítója
I-kezdetű, és a beállításokban megadtad a PayPal API-kulcsokat, vagy - Authorize.net-tel fizetett, az azonosítója
anet_kezdetű, és a beállításokban megadtad az Authorize.net API-kulcsokat.
| Paraméter | Típus | Jelentés |
|---|---|---|
$can_update_card |
logikai | Frissítheti-e a kártyaadatait. |
$user_id |
egész | Az ellenőrzött felhasználó azonosítója. |
Táblázatok az adminfelületen
Szekció neve “Táblázatok az adminfelületen”| Hook | Típus | Mire jó |
|---|---|---|
rcp_levels_page_table_header |
akció | Új fejlécoszlopot adhatsz a Restrict → Membership Levels oldal táblázatához. |
rcp_members_below_table |
akció | Tartalmat írhatsz a tagok táblázata alá az adminfelületen. |
Egyik hook sem kap paramétert. A szintek táblázatának új oszlopához a fejlécoszlop mellé a soronkénti és a láblécoszlop hookját is használd, ezek a harmadik hookfejezetben szerepelnek.
function pelda_rcp_levels_page_table_header() { echo '<th>' . esc_html__( 'Megjegyzés', 'mytheme' ) . '</th>';}add_action( 'rcp_levels_page_table_header', 'pelda_rcp_levels_page_table_header' );
function pelda_rcp_members_below_table() { echo '<p>' . esc_html__( 'Ez a szöveg a tagok táblázata alatt jelenik meg.', 'mytheme' ) . '</p>';}add_action( 'rcp_members_below_table', 'pelda_rcp_members_below_table' );Készült: