Tovább a tartalomhoz

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”

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), vagy none, 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 );

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

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.

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

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

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

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

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:

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