Akciók és szűrők: tagság-szűrők, aktiválás, lemondás, tagok oszlopa
Tíz hook paraméterekkel és példákkal: a tagság hozzáférése, lejárata, megújítása, lemondása, állapota, időarányos jóváírása, az átjáróbeli lemondás, az első aktiválás és a tagok oldalának régi oszlop-hookja.
Ez a fejezet az előző hookfejezet folytatása: itt a tagságobjektum (RCP_Membership) szűrői szerepelnek, amelyek a régi, rcp_member_ kezdetű szűrőket váltották fel. 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. Mivel ezek a hookok több paramétert adnak át, a prioritás után mindig add meg a paraméterek számát is, például add_filter( 'rcp_membership_can_access', 'fuggveny', 10, 4 ). A szűrőnek mindig vissza kell adnia az (esetleg módosított) első paramétert.
Hozzáférés, lejárat, megújítás, lemondás
Szekció neve “Hozzáférés, lejárat, megújítás, lemondás”rcp_membership_can_access
Szekció neve “rcp_membership_can_access”Szűrő. Azt dönti el, hogy egy adott tagság hozzáférést ad-e egy adott bejegyzéshez.
$can_access(bool): megfelel-e a tagság a korlátozás feltételeinek.$membership_id(int): az ellenőrzött tagság azonosítója.$post_id(int): az ellenőrzött bejegyzés azonosítója.$membership(RCP_Membership): a tagságobjektum.
function pelda_rcp_membership_can_access( $can_access, $membership_id, $post_id, $membership ) { // A 42-es azonosítójú oldalt minden tagság elérheti. if ( 42 === (int) $post_id ) { return true; } return $can_access;}add_filter( 'rcp_membership_can_access', 'pelda_rcp_membership_can_access', 10, 4 );Kapcsolódó: a régi rcp_member_can_access.
rcp_membership_calculated_expiration_date
Szekció neve “rcp_membership_calculated_expiration_date”Szűrő. A tagság kiszámított lejárati dátumát módosítja. A 3.0-s tagságrendszerben ez váltotta fel a rcp_member_calculated_expiration szűrőt. Fontos: az első regisztrációkor nem fut le, csak akkor, ha egy már létező tagságnál új lejáratot számol a bővítmény, például megújításkor.
$expiration(string): a lejárat MySQL-formátumban (Y-m-d 23:59:59), vagynone, ha a tagság korlátlan.$membership_id(int): a tagság azonosítója.$membership(RCP_Membership): a tagságobjektum.
function pelda_rcp_membership_calculated_expiration_date( $expiration, $membership_id, $membership ) { if ( 'none' === $expiration ) { return $expiration; } // Megújításkor 7 nap türelmi idő a számított lejárathoz. return gmdate( 'Y-m-d 23:59:59', strtotime( $expiration . ' +7 days' ) );}add_filter( 'rcp_membership_calculated_expiration_date', 'pelda_rcp_membership_calculated_expiration_date', 10, 3 );rcp_membership_can_renew
Szekció neve “rcp_membership_can_renew”Szűrő. Azt dönti el, hogy a tagság megújítható-e. Alapesetben hamis az eredmény, ha:
- a tagság ingyenes,
- a tagság sosem jár le,
- a tagság részletfizetési tervhez tartozik, és a terv már befejeződött (elérte a legnagyobb számlázási számot),
- a tagság ismétlődő, és az állapota „aktív”.
Paraméterek: $can_renew (bool), $membership_id (int), $membership (RCP_Membership). Ez váltotta fel a rcp_member_can_renew szűrőt.
function pelda_rcp_membership_can_renew( $can_renew, $membership_id, $membership ) { // Az 5-ös azonosítójú szintű tagság sosem újítható meg. if ( 5 === (int) $membership->get_object_id() ) { return false; } return $can_renew;}add_filter( 'rcp_membership_can_renew', 'pelda_rcp_membership_can_renew', 10, 3 );rcp_membership_can_cancel
Szekció neve “rcp_membership_can_cancel”Szűrő. Azt dönti el, hogy a tagság lemondható-e.
$can_cancel(bool): igaz, ha lemondható.$membership_id(int): az ellenőrzött tagság azonosítója.$membership(RCP_Membership): a tagságobjektum.
function pelda_rcp_membership_can_cancel( $can_cancel, $membership_id, $membership ) { // Az 5-ös azonosítójú szintű tagság nem mondható le az oldalról. if ( 5 === (int) $membership->get_object_id() ) { return false; } return $can_cancel;}add_filter( 'rcp_membership_can_cancel', 'pelda_rcp_membership_can_cancel', 10, 3 );rcp_membership_payment_profile_cancelled
Szekció neve “rcp_membership_payment_profile_cancelled”Szűrő. Azt jelzi, hogy az átjáróbeli előfizetés lemondása sikerült-e. Harmadik fél által írt fizetési átjáró ezzel hajtja végre a lemondást: ha az átjáró azonosítója egyezik a sajátoddal, mondd le az előfizetést, és true-t adj vissza sikernél, WP_Error objektumot hibánál. Csak a saját átjáród lemondásait dolgozd fel.
$success(true|WP_Error): sikerült-e a lemondás.$gateway(string): az átjáró azonosítója (slug).$gateway_subscription_id(string): az átjáróbeli előfizetés azonosítója, ezt kell lemondani.$membership_id(int): a lemondott tagság azonosítója.$membership(RCP_Membership): a tagságobjektum.
function pelda_rcp_elements_cancel( $success, $gateway, $gateway_subscription_id, $membership_id, $membership ) { // Ha már lemondták, vagy nem a Stripe Elements átjáróról van szó, nem csinálunk semmit. if ( $success || 'stripe_elements' !== $gateway ) { return $success; } return rcp_stripe_cancel_membership( $gateway_subscription_id );}add_filter( 'rcp_membership_payment_profile_cancelled', 'pelda_rcp_elements_cancel', 10, 5 );A hook nevét kettős l-lel (cancelled) kell írni.
Állapot, jóváírás, aktiválás
Szekció neve “Állapot, jóváírás, aktiválás”rcp_membership_get_status
Szekció neve “rcp_membership_get_status”Szűrő. A tagság állapotát módosítja, amikor azt az RCP_Membership::get_status() metódussal kéred le. A régi rcp_member_get_status szűrőt váltotta fel.
$status(string): a tagság jelenlegi állapota.$membership_id(int): az ellenőrzött tagság azonosítója.$membership(RCP_Membership): a tagságobjektum.
function pelda_rcp_membership_get_status( $status, $membership_id, $membership ) { // Naplózáshoz: kiírjuk, milyen állapotot kapott a kód. error_log( sprintf( 'Tagság %d állapota: %s', $membership_id, $status ) ); return $status;}add_filter( 'rcp_membership_get_status', 'pelda_rcp_membership_get_status', 10, 3 );rcp_membership_is_expired
Szekció neve “rcp_membership_is_expired”Szűrő. Azt dönti el, hogy a tagság lejárt-e. A régi rcp_member_is_expired utódja.
$is_expired(bool): lejárt-e a tagság.$membership_id(int): az ellenőrzött tagság azonosítója.$membership(RCP_Membership): a tagságobjektum.
A példa két órával eltolja az összehasonlítást: a tagság a lejárat után még két óráig érvényesnek számít.
function pelda_rcp_is_expired( $is_expired, $membership_id, $membership ) { // Ha még nem járt le, nincs teendő. if ( ! $is_expired ) { return $is_expired; }
$expiration = $membership->get_expiration_date( 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_membership_is_expired', 'pelda_rcp_is_expired', 10, 3 );rcp_membership_get_prorate_credit
Szekció neve “rcp_membership_get_prorate_credit”Szűrő. Azt az összeget módosítja, amelyet a tagság fel nem használt idejének értékeként jóváírsz, ha a tag másik szintre vált (feljebb vagy lejjebb). Ez a hátralévő idő értéke.
$credit_amount(float): a másik tagságra felhasználható jóváírás összege.$membership_id(int): a tagság azonosítója.$membership(RCP_Membership): a tagságobjektum.
function pelda_rcp_membership_get_prorate_credit( $credit_amount, $membership_id, $membership ) { // Legfeljebb 50 egységnyi jóváírás. return min( $credit_amount, 50 );}add_filter( 'rcp_membership_get_prorate_credit', 'pelda_rcp_membership_get_prorate_credit', 10, 3 );rcp_membership_post_activate
Szekció neve “rcp_membership_post_activate”Akció. Akkor fut le, amikor a tagság először aktiválódik: vagyis a tagság létrejötte és az első fizetés beérkezése után. Megújításkor nem fut le (ahhoz a rcp_membership_post_renew való).
$membership_id(int): a tagság azonosítója.$membership(RCP_Membership): a tagságobjektum.
function pelda_rcp_membership_post_activate( $membership_id, $membership ) { // Például: naplóbejegyzés az első aktiváláskor. error_log( sprintf( 'A(z) %d azonosítójú tagság először aktiválódott.', $membership_id ) );}add_action( 'rcp_membership_post_activate', 'pelda_rcp_membership_post_activate', 10, 2 );Tagok oldala: régi oszlop-hook
Szekció neve “Tagok oldala: régi oszlop-hook”rcp_members_page_table_column
Szekció neve “rcp_members_page_table_column”Akció, elavult. Egy új oszlop tartalmát írja ki a tagok oldalának táblázatába. Helyette használd a rcp_memberships_list_table_column_{column} hookot, ahol a {column} az oszlop azonosítója.
$user_id(int): a megjelenített tag azonosítója.
function pelda_rcp_members_page_table_column( $user_id ) { echo '<td>' . esc_html( get_user_meta( $user_id, 'telefonszam', true ) ) . '</td>';}add_action( 'rcp_members_page_table_column', 'pelda_rcp_members_page_table_column' );Készült: