Tovább a tartalomhoz

Kódpéldák: tagságtábla, e-mail címke, pénznem, tagságok lekérése

Rövid PHP-példák: új oszlop a tagságok táblájában, egyéni e-mail címke, új pénznem, tagságok lekérdezése és a szintmeta API.

Ez a fejezet egyéni kódot mutat be. Az ilyen kód a saját felelősséged: a példák kiindulópontnak szólnak, ha elakadsz, kérj fejlesztő segítséget. A kódot érdemes egy saját bővítménybe vagy a gyermektéma functions.php fájljába tenni.

Ha saját tagságmetát használsz (például „company”), megjelenítheted egy külön oszlopban a Memberships táblázatban. Két lépés kell: az oszlop regisztrálása, majd az értékek kiírása.

Az rcp_memberships_list_table_columns szűrővel add hozzá az oszlopot. Ez még csak a fejlécet hozza létre, értékek nélkül.

function ag_rcp_memberships_list_table_columns( $columns ) {
$key = 'company'; // Kisbetűs, szóköz nélküli egyedi azonosító.
$name = __( 'Company', 'rcp' ); // A fejlécben megjelenő felirat, lehet benne szóköz.
$columns[ $key ] = $name;
return $columns;
}
add_filter( 'rcp_memberships_list_table_columns', 'ag_rcp_memberships_list_table_columns' );

Az rcp_memberships_list_table_column_{oszlopkulcs} szűrő adja meg, mi jelenjen meg az oszlopban. A {oszlopkulcs} helyére az 1. lépésben választott kulcs kerül. Itt a kulcs company, ezért a szűrő neve rcp_memberships_list_table_column_company.

function ag_rcp_memberships_list_table_column_company( $value, $membership ) {
$company = rcp_get_membership_meta( $membership->get_id(), 'company', true );
return $company;
}
add_filter( 'rcp_memberships_list_table_column_company', 'ag_rcp_memberships_list_table_column_company', 10, 2 );

A függvény a tagságmeta API-val olvassa ki az értéket. Cseréld arra, amit meg akarsz jeleníteni.

Ugyanezzel a szűrővel oszlopot el is tüntethetsz. Az alapértelmezett oszlopok kulcsai:

Kulcs Oszlop
customer Az ügyfél
object_id A tagsági szint neve
status Az állapot
auto_renew Az ismétlődés
created_date A létrehozás dátuma
expiration_date A lejárat dátuma

Például a létrehozás dátumának oszlopát így távolíthatod el:

function ag_rcp_memberships_list_remove_column( $columns ) {
$key_to_remove = 'created_date'; // Ide a törölni kívánt oszlop kulcsa kerül.
if ( array_key_exists( $key_to_remove, $columns ) ) {
unset( $columns[ $key_to_remove ] );
}
return $columns;
}
add_filter( 'rcp_memberships_list_table_columns', 'ag_rcp_memberships_list_remove_column' );

Az e-mailek szövegébe a sablon címkékkel (például %username%) szúrhatsz be dinamikus adatot. A beépített címkék listáját az e-mail beállítások oldalán találod. Saját címkét két lépésben vehetsz fel: regisztrálod, majd megírod a függvényt, amely az értéket adja.

Az rcp_email_template_tags szűrővel add hozzá:

function ag_rcp_email_template_tags( $email_tags ) {
$email_tags[] = array(
'tag' => 'my_custom_tag',
'description' => __( 'Description of my custom tag.' ),
'function' => 'ag_rcp_my_custom_tag_callback_function',
);
return $email_tags;
}
add_filter( 'rcp_email_template_tags', 'ag_rcp_email_template_tags' );

A tömb három értéke:

Kulcs Jelentése
tag A címke neve a % jelek nélkül. A fenti példa címkéjét az e-mailben %my_custom_tag% alakban használod.
description Rövid leírás, ez jelenik meg a címkék listájában a beállítások oldalon.
function Annak a függvénynek a neve, amely az értéket szolgáltatja.

A regisztrálás után a címke megjelenik a Restrict → Settings → Emails oldal címkelistájában.

https://minta-bolt.hu/wp-admin/admin.php?page=rcp-settings
Az e-mail beállítások oldala, ahol az elérhető sablon címkék listája látható

A kép az e-mail beállítások fülét mutatja, a sablon címkék listájával: ide kerül az újonnan regisztrált címke is.

A függvény három paramétert kap:

  • $user_id: az e-mailt kapó felhasználó azonosítója,
  • $payment_id: a felhasználó legutóbbi fizetésének azonosítója,
  • $tag: a címke neve.

Például egy felhasználói metaadat visszaadása:

function ag_rcp_my_custom_tag_callback_function( $user_id = 0, $payment_id = 0, $tag = '' ) {
$my_user_meta = get_user_meta( $user_id, 'my_custom_user_meta', true );
return $my_user_meta;
}

A függvény neve egyezzen a function értékkel a regisztrációs tömbben.

A bővítmény a legtöbb nagy pénznemet ismeri. Ha a tiéd hiányzik, PHP-kóddal felveheted.

  1. Az rcp_currencies szűrővel add hozzá a pénznemet. Ettől megjelenik a Restrict → Settings → Payments oldal pénznem-legördülőjében, és ennyi elég is a működéshez.

    function pw_rcp_custom_currency( $currencies ) {
    $currencies['MRO'] = 'Ouguiya (UM)';
    return $currencies;
    }
    add_filter( 'rcp_currencies', 'pw_rcp_custom_currency' );
  2. Opcionális: add meg a pénznem jelét. Ha kihagyod, a bővítmény a pénznem kódját írja az ár elé vagy mögé. A jel helyét a Currency Position beállítás határozza meg, ezért két szűrő létezik: rcp_{pénznemkód}_currency_filter_before (az ár előtt) és rcp_{pénznemkód}_currency_filter_after (az ár után). A pénznemkódot kisbetűvel írd.

    function ag_rcp_mro_currency_filter_after( $formatted_price, $currency_code, $price ) {
    return $price . ' ' . 'UM';
    }
    add_filter( 'rcp_mro_currency_filter_after', 'ag_rcp_mro_currency_filter_after', 10, 3 );

    Ez az árat „10 UM” alakban jeleníti meg.

https://minta-bolt.hu/wp-admin/admin.php?page=rcp-settings
A fizetési beállítások oldala, a pénznem legördülő listával

A képen a Payments fül látható: a felvett pénznem a pénznem legördülőjében jelenik meg.

A kódot egy saját, egyszerű bővítménybe tedd, ne a témába, hogy téma váltásakor ne vesszen el.

Egy felhasználó tagságainak lekérése

Szekció neve “Egy felhasználó tagságainak lekérése”

Három fogalom kapcsolódik egymáshoz:

  1. A felhasználói fiók (WP_User): ezzel jelentkezik be valaki az oldalra.
  2. Az ügyfélrekord (RCP_Customer): a felhasználó jelenlétét rögzíti a bővítményben. Ha valaki még soha nem vásárolt tagságot, nincs ügyfélrekordja. A felhasználói azonosító köti a fiókhoz.
  3. A tagságrekord (RCP_Membership): magát a tagságot írja le, az ügyfélazonosítóval kapcsolódik az ügyfélhez. Jelenleg egy ügyfélnek legfeljebb egy tagsága lehet, de a jövőben több is lehet, ezért a kódot úgy írd meg, hogy tömbként kezeld.

Így jutsz el a felhasználói azonosítótól a tagságobjektumig:

$user_id = 123; // A felhasználó azonosítója.
// Az ügyfélrekord lekérése a felhasználói azonosító alapján.
$customer = rcp_get_customer_by_user_id( $user_id );
// Ha nincs ügyfélrekord, nincs tagság sem.
if ( empty( $customer ) ) {
return;
}
// Az ügyfél tagságai (tömb).
$memberships = $customer->get_memberships();
foreach ( $memberships as $membership ) {
// $membership egy RCP_Membership objektum.
$status = $membership->get_status();
$membership_level_id = $membership->get_object_id();
}

A tagsági szintekhez is tárolhatsz saját metaadatot. Az API a szokásos WordPress-metaadat-függvényekhez hasonlóan működik, a $rcp_levels_db globális objektumon keresztül:

global $rcp_levels_db;
// Metaadat hozzáadása
$rcp_levels_db->add_meta( $level_id = 0, $key = '', $value = '', $unique = true );
// Metaadat frissítése
$rcp_levels_db->update_meta( $level_id = 0, $key = '', $value = '', $previous_value = '' );
// Metaadat lekérése
$rcp_levels_db->get_meta( $level_id = 0, $key = '', $single = true );
// Metaadat törlése
$rcp_levels_db->delete_meta( $level_id = 0, $key = '', $value = '' );

Ugyanezt a négy műveletet segédfüggvényekkel is elvégezheted:

rcp_add_membership_level_meta( $level_id, $meta_key, $meta_value, $unique = false );
rcp_update_membership_level_meta( $level_id, $meta_key, $meta_value, $prev_value = '' );
rcp_get_membership_level_meta( $level_id, $key = '', $single = false );
rcp_delete_membership_level_meta( $level_id, $meta_key, $meta_value = '' );

A fizetési rekordokhoz is társíthatsz saját metaadatot, így az adat közvetlenül ahhoz a fizetéshez tartozik. A fizetési metaadat API a szokásos WordPress-metaadat-függvényekhez szinte teljesen hasonlóan működik, a $rcp_payments_db globális objektumon keresztül:

global $rcp_payments_db;
// Metaadat hozzáadása
$rcp_payments_db->add_meta( $payment_id = 0, $key = '', $value = '', $unique = true );
// Metaadat frissítése
$rcp_payments_db->update_meta( $payment_id = 0, $key = '', $value = '', $previous_value = '' );
// Metaadat lekérése
$rcp_payments_db->get_meta( $payment_id = 0, $key = '', $single = true );
// Metaadat törlése
$rcp_payments_db->delete_meta( $payment_id = 0, $key = '', $value = '' );

Az első paraméter a fizetés azonosítója. A példák útmutatásnak szólnak: egyéni fejlesztésről van szó, a hibakeresés és az átalakítás a te feladatod.

Az Ultimate Member előfizetés fülének átalakítása

Szekció neve “Az Ultimate Member előfizetés fülének átalakítása”

Ha az Ultimate Member integrációt használod, a profil subscription fülének tartalmát lecserélheted. Először el kell távolítani az alapértelmezett kimenetet, utána a szűrővel újra felépíthető a fül.

/**
* Az alapértelmezett előfizetés-fül kimenetének eltávolítása.
*/
add_action( 'wp_loaded', function () {
if ( ! class_exists( 'RCP_UMUltimateMember2' ) ) {
return;
}
remove_action(
'um_account_content_hook_subscription',
array( RCP_UMUltimateMember2::get_instance(), 'account_page' )
);
} );
/**
* A fül újraépítése módosított tartalommal.
*
* Az Ultimate Member ezt a hookot szűrőként futtatja: HTML-szöveget kell visszaadni.
* A profil tulajdonosának aktív tagságrekordja kell hozzá.
*/
add_filter( 'um_account_content_hook_subscription', function ( $output, $shortcode_args = array() ) {
$user_id = function_exists( 'um_profile_id' ) ? um_profile_id() : get_current_user_id();
if ( ! $user_id || ! function_exists( 'rcp_get_customer_by_user_id' ) ) {
return $output;
}
$customer = rcp_get_customer_by_user_id( $user_id );
$membership = $customer ? $customer->get_pending_membership() : false;
if ( ! $membership ) {
$memberships = $customer ? $customer->get_memberships() : array();
$membership = ! empty( $memberships ) ? reset( $memberships ) : false;
}
$level_name = $membership ? $membership->get_membership_level_name() : __( 'None', 'rcp' );
$status = $membership ? $membership->get_status() : '';
$expiration = $membership ? $membership->get_expiration_date() : '';
ob_start();
?>
<div class="um-field um-field-subscription">
<div class="um-field-label"><label><?php esc_html_e( 'Membership', 'rcp' ); ?></label></div>
<div class="um-field-area"><?php echo esc_html( $level_name ); ?></div>
</div>
<div class="um-field um-field-subscription-status">
<div class="um-field-label"><label><?php esc_html_e( 'Status', 'rcp' ); ?></label></div>
<div class="um-field-area"><?php echo esc_html( $status ); ?></div>
</div>
<div class="um-field um-field-subscription-expiration">
<div class="um-field-label"><label><?php esc_html_e( 'Expiration', 'rcp' ); ?></label></div>
<div class="um-field-area"><?php echo esc_html( $expiration ); ?></div>
</div>
<?php
return $output . ob_get_clean();
}, 10, 2 );

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