لقد كنت أراقب منتديات meta.discourse لسنوات، وأجمع مقتطفات وأتعلم كيفية تحسين موقع عميل يستخدم Wordpress + Memberpress + Discourse (مستضاف ذاتيًا).
كنت بحاجة (ولا أزال بحاجة) إلى تعيين مجموعات Discourse بناءً على عضويات Memberpress.
للمرجع:
- موقع العميل (مزود SSO): https://secretsofsolo.com/
- موقع Discourse: https://jamcircle.secretsofsolo.com/
سابقًا (لعدة سنوات) استخدمت طريقة فلتر add_filter( 'wpdc_sso_params' :
كان العيب هو أن مجموعات Discourse كانت تُحدّث فقط عند تسجيل دخول المستخدم، وأردت شيئًا يكون له تأثير أكثر فورية (على سبيل المثال، عند حدوث معاملة Memberpress).
بصراحة، مهاراتي في برمجة PHP أساسية جدًا. أنا مطور واجهة أمامية HTML/CSS أكثر.
الآن قمت بإعادة كتابة وظائفي لموقع العميل باستخدام وظيفة WP Discourse أفضل موصوفة هنا
والتي تستخدم وظائف: \\WPDiscourse\\Utilities\\Utilities::add_user_to_discourse_group و: \\WPDiscourse\\Utilities\\Utilities::remove_user_from_discourse_group.
الآن يمكنني الاستماع إلى أحداث Memberpress وإضافة مجموعات Discourse باستخدام كتلة التعليمات البرمجية هذه (functions.php):
add_action('mepr-event-create', 'listen_to_mepr_events');
function listen_to_mepr_events($event) {
$obj = $event->get_data();
//$obj قد يكون كائن MeprTransaction أو كائن MeprSubscription
if(!($obj instanceof MeprTransaction) && !($obj instanceof MeprSubscription)) {
return; // لا يوجد شيء هنا للقيام به إذا لم نتعامل مع معاملة أو اشتراك
}
$member = $obj->user(); // الحصول على بيانات كائن العضو من كائن الحدث
$user_id = $member->ID; // الحصول على معرف المستخدم من الكائن
if($member->is_active_on_membership($obj)) { // عضوية نشطة
if(3780 == $obj->product_id) { // عضوية شهرية
$add_group = 'Ksenia_Basic'; // اسم مجموعة Discourse
$remove_groups = ['Ksenia_Essential','Ksenia_Premium','Ksenia_Free','Ksenia_Annual'];
// الإضافة إلى مجموعة Discourse
\\WPDiscourse\\Utilities\\Utilities::add_user_to_discourse_group( $user_id, $add_group );
// الإزالة من مجموعات Discourse
\\WPDiscourse\\Utilities\\Utilities::remove_user_from_discourse_group( $user_id, $remove_groups );
}
else if(3847 == $obj->product_id) { // عضوية 6 أشهر (أساسية)
$add_group = 'Ksenia_Essential'; // اسم مجموعة Discourse
$remove_groups = ['Ksenia_Basic','Ksenia_Premium','Ksenia_Free','Ksenia_Annual'];
// الإضافة إلى مجموعة Discourse
\\WPDiscourse\\Utilities\\Utilities::add_user_to_discourse_group( $user_id, $add_group );
// الإزالة من مجموعات Discourse
\\WPDiscourse\\Utilities\\Utilities::remove_user_from_discourse_group( $user_id, $remove_groups );
}
}
else { // لا توجد مطابقات
}
}
مرجع إضافي: يمكن العثور على خطاف حدث Memberpress add_action('mepr-event-create', 'listen_to_mepr_events'); هنا:
للعلم - هذه نسخة مبسطة مما أستخدمه على موقع العميل الخاص بي. يمكن العثور على النسخة الكاملة (التي تضيف إدارة Learndash + Mailster) هنا: Memberpress + Learndash + Mailster + WP Discourse · GitHub
شكرًا لكل من قدم مقتطفات ودعمًا على مر السنين في هذا المنتدى. أعرف أن هناك العديد من المتطفلين مثلي الذين يجدون هذا المورد قيمًا ومفيدًا للغاية.
إذا كانت لديك أي اقتراحات أو رأيت مشاكل في مثالي، فأخبرني كيف يمكنني التحسين.