لقد استخدمت إضافة Discourse و PMPro، بالإضافة إلى إضافة Zapier الخاصة بـ PMPro. أحاول تحديث مستوى العضوية للمستخدم في Discourse. أتوقع أنه عند تغيير مستوى العضوية باستخدام wp-admin لأي مستخدم، يجب أن يتم تحديثه في قسم إدارة المستخدمين في موقعي على Discourse. فما الذي أحتاج إلى فعله لتحقيق ذلك؟ هل يمكنك إعطائي بعض الأفكار حول هذا الموضوع؟
ستحتاج إلى إضافة إجراء إلى ملف functions.php الخاص بك
/* راجع المثال على http://hookr.io/actions/pmpro_after_change_membership_level/ */
do_action( 'pmpro_after_change_membership_level', $level_id, $user_id, $cancel_level );
function action_pmpro_after_change_membership_level( $level_id, $user_id, $cancel_level ) {
. . . . الكود الذي يحصل على مستوى العضوية والمجموعة ويضيفها إلى المجموعة
}
هل يمكنك شرح كيفية الحصول على $level_id و $user_id و $cancel_level واسم المجموعة للمستخدم المحدّث؟
لقد قمت بربط التوثيق. أعتقد أنها تُمرَّر عبر خطاف الإجراء.
مرحبًا جاي، شكرًا على ردك. لقد نجح الأمر معي، لكن القيمة القديمة لا تزال موجودة. هذا يعني أنني حصلت على كلا القيمتين: مستوى العضوية الجديد ومستوى العضوية القديم. هل لديك أي فكرة حول كيفية إزالة القيمة القديمة لمستوى العضوية؟
أستخدم ما يلي:
DiscourseUtilities::remove_user_from_discourse_group( $user_id, $group_name );
هذه هي دالة الإزالة الخاصة بي:
function dcpmp_remove_member_from_group( $level_id, $user_id, $cancel_level ) {
if ( ! empty( $cancel_level ) ) {
$group_name = dcpmp_get_level_for_id( $cancel_level );
if ( is_wp_error( $group_name ) ) {
return null;
}
// إزالة المستخدم.
$result = DiscourseUtilities::remove_user_from_discourse_group( $user_id, $group_name );
if ( ! empty( $result->success ) ) {
// حذف مفتاح بيانات العضوية.
delete_user_meta( $user_id, "dcpmp_group_{$group_name}" );
}
return $result;
}
return null;
}
أعتقد أن هناك وظيفة لإزالة من المجموعة في wp-discourse يمكنك استدعاؤها.
هذه هي الدالة نفسها التي يستخدمها [Simon Cossar] (https://meta.discourse.org/u/Simon_Cossar)team راجع هذا الرابط
لقد استخدمت نفس الدالة، أحتاج إلى مساعدة. لقد نشرت الكود أيضًا، راجع الرسالة أعلاه.
هذا هو كود تحديث مستوى العضوية الخاص بي:
function action_pmpro_after_change_membership_level( $level_id, $user_id, $cancel_level ) {
$group_name = dcpmp_get_level_for_id( $level_id );
if ( is_wp_error( $group_name ) ) {
return null;
}
$groupname = DiscourseUtilities::get_discourse_user( $user_id, false );
// إزالة المستخدم.
$result = DiscourseUtilities::remove_user_from_discourse_group( $user_id, $groupname );
if ( ! empty( $result->success ) ) {
// إزالة مفتاح بيانات العضوية.
delete_user_meta( $user_id, "dcpmp_group_{$groupname}" );
}
$result1 = DiscourseUtilities::add_user_to_discourse_group( $user_id, $group_name );
if ( ! empty( $result1->success ) ) {
// إذا تمت إضافة المستخدم إلى المجموعة، أضف زوجًا من المفتاح/القيمة يمكن استخدامه لاحقًا.
add_user_meta( $user_id, "dcpmp_group_{$group_name}", 1, true );
}
return $result;
return $result1;
}
add_action( ‘pmpro_after_change_membership_level’, ‘action_pmpro_after_change_membership_level’, 10, 3 );
لست متأكدًا مما تفعله هذه السطر في الكود الخاص بك:
$groupname = DiscourseUtilities::get_discourse_user( $user_id, false );
سيؤدي هذا إلى تعيين $groupname إلى كائن مستخدم في Discourse. أعتقد أنك بحاجة إلى إزالة هذا السطر واستخدام المتغير $group_name الذي تقوم بتعيينه في السطر الأول من الكود الخاص بك.
لقد استخدمت ذلك من قبل لكنه لا يعمل
يرجى تزويدي بالحل
إذا كنت ترغب في أن نقدم لك حلاً، فستحتاج إلى دفع رسوم. اشترك في خطة استضافة على https://discourse.org/buy