Wordpress SSO - Restrict Content / user levels / groups

مرحبًا يا رفاق، أعيد إحياء هذا المنشور القديم لأن سؤالي ينطبق على Restrict Content Pro، لذا فهو مشابه لسؤال صاحب المنشور الأصلي. بشكل أساسي، أساعد في موقع تستخدم فيه نظام العضوية Restrict Content Pro، وأحاول مزامنة مجموعات Discourse مع عضويات RCP المدفوعة - أي أن أي شخص لديه عضوية يجب أن تتم مزامنته مع مجموعة Members في منتدى Discourse.

قضيت وقتًا طويلاً في محاولة تشغيل شيء مشابه لمثال إدارة عضوية مجموعات Discourse باستخدام WP Discourse SSO الخاص بـ Simon. تعمل عملية SSO بشكل جيد، لكن العضويات لا تزال غير مُزامنة (إضافة الأعضاء إلى مجموعة عند تفعيل العضوية بنجاح، أو إزالة الأعضاء من مجموعة عند انتهاء صلاحية العضوية).

في هذا المنشور، أحاول فقط جعل إضافة أعضاء جدد إلى مجموعة Discourse تعمل. تحتوي منتديات Discourse في الموقع على مجموعة واحدة فقط وهي Members. (يجب أن تكون إزالة المجموعات سهلة بما يكفي لأن خطاف Restrict Content Pro هو نفسه، مع استبدال اللاحقة active بـ expired). يذكر Restrict Content Pro خطاف الإجراء rcp_transition_membership_status_active كإجراء يُفعّل عند تغيير حالة العضوية. يحتوي على معاملات لـ $old_status و $membership_id. عند تشغيل rcp_get_membership()، يتم إرجاع كائن RCP_Membership (يحتوي على مرجع إلى $user_id في WordPress بين أشياء أخرى).

إليك النسخة المبسطة التي توصلت إليها:


use WPDiscourse\Utilities\Utilities as DiscourseUtilities;

// إضافة مستخدم إلى مجموعة 'members' في Discourse.
function rcpdc_add_member_to_group( $membership_id ) {
    $membership = rcp_get_membership( $membership_id );
    $user_id = $membership->get_user_id();
    DiscourseUtilities::add_user_to_discourse_group( $user_id, 'Members' );
}

// تأكد من التحقق من وجود فئة Discourse.
if ( class_exists( '\WPDiscourse\Discourse\Discourse' ) ) {
    // إجراء rcp المضاف إليه {active} يُنفذ عند إضافة عضوية جديدة
    add_action( 'rcp_transition_membership_status_active', 'rcpdc_add_member_to_group' );
}

إذا كنت تستطيع رؤية شيء أخطئ فيه بوضوح ويمنع هذا الإجراء من العمل بشكل صحيح، فسأقدر مساعدتك حقًا. شكرًا!