Tovább a tartalomhoz

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

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

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

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

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

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.

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.

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.

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

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.

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

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

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