그리고 discourse wp 설정에서 discourse connect 제공자를 사용 중입니다
안녕하세요 @simon @Firepup650 오랜만에 다시 도움을 요청드립니다.
제 코드는 다음과 같습니다.
use WPDiscourse\Utilities\Utilities as DiscourseUtilities;
function mepr_capture_new_member_signup_completed($event) {
$user = $event->get_data();
$user_id = $user->ID;
// Get user data based on user ID
$user_data = get_userdata($user_id);
// Log debug information about the user data
log_debug_info("debug_log.txt", "User Data: ", print_r($user_data, true));
// Check if user data exists
if ($user_data) {
// Get the user roles
$roles = $user_data->roles;
// Check if the user does not have the "browns" role or does have it
if (!in_array('browns', $roles) || in_array('browns', $roles)) {
// Remove all existing roles
foreach ($roles as $role) {
$user_data->remove_role($role);
}
// Add the "browns" role
$user_data->add_role('browns');
log_debug_info("debug_log.txt", "Assigned Browns Role: ", print_r($user_data, true));
if ( class_exists( '\WPDiscourse\Discourse\Discourse' ) ) {
// Add user to the Discourse group for "browns"
$s2member_level_1_groups = get_option('s2member_level_1_groups', '');
log_debug_info("debug_log.txt", "s2member level 1 groups: ", print_r($s2member_level_1_groups, true));
$result = DiscourseUtilities::add_user_to_discourse_group($user_id, $s2member_level_1_groups);
log_debug_info("debug_log.txt", "Discourse Group Addition Result: ", print_r($result, true));
}
// Additional SSO parameters if needed
$sso_params = array();
$sso_params = apply_filters('wpdc_sso_params', $sso_params, $user_data);
} else {
// Collect all level groups
$s2member_level_1_groups = get_option('s2member_level_1_groups', '');
$s2member_level_2_groups = get_option('s2member_level_2_groups', '');
$s2member_level_3_groups = get_option('s2member_level_3_groups', '');
$s2member_level_4_groups = get_option('s2member_level_4_groups', '');
// Combine all groups into one array
$s2member_level_groups = array_merge(
explode(',', $s2member_level_1_groups),
explode(',', $s2member_level_2_groups),
explode(',', $s2member_level_3_groups),
explode(',', $s2member_level_4_groups)
);
// Remove duplicates
$s2member_level_groups = array_unique($s2member_level_groups);
// Remove user from all collected groups
foreach ($s2member_level_groups as $group) {
$result = DiscourseUtilities::remove_user_from_discourse_group($user_id, $group);
// You may handle $result as needed
}
}
} else {
// Handle cases where $user_id or $role is not provided
// This could be logged or handled differently based on your requirements
// For now, let's log a message
error_log("User ID or role not provided in user_registered_callback.");
}
}
add_action('mepr-event-member-signup-completed', 'mepr_capture_new_member_signup_completed');
현재 문제는 사용자가 Discourse 그룹에 추가되지 않는 것입니다. 코드의 출력 결과는 다음과 같습니다.
=== User Data: ===
WP_User Object
(
[data] => stdClass Object
(
[ID] => 457
[user_login] => sibahmed
[user_pass] => $P$BTVeX1n6d40NtHBCiQqzSphMolH/hH0
[user_nicename] => sibahmed
[user_email] => sibahmed82@gmail.com
[user_url] =>
[user_registered] => 2024-07-30 17:35:51
[user_activation_key] =>
[user_status] => 0
[display_name] => sib ahmed
)
[ID] => 457
[caps] => Array
(
[subscriber] => 1
[browns] => 1
)
[cap_key] => wp_capabilities
[roles] => Array
(
[0] => subscriber
[1] => browns
)
[allcaps] => Array
(
[read] => 1
[level_0] => 1
[upload_files] => 1
[access_s2member_level0] => 1
[subscriber] => 1
[browns] => 1
)
[filter] =>
[site_id:WP_User:private] => 1
)
=== Assigned Browns Role: ===
WP_User Object
(
[data] => stdClass Object
(
[ID] => 457
[user_login] => sibahmed
[user_pass] => $P$BTVeX1n6d40NtHBCiQqzSphMolH/hH0
[user_nicename] => sibahmed
[user_email] => sibahmed82@gmail.com
[user_url] =>
[user_registered] => 2024-07-30 17:35:51
[user_activation_key] =>
[user_status] => 0
[display_name] => sib ahmed
[user_level] => 0
)
[ID] => 457
[caps] => Array
(
[browns] => 1
)
[cap_key] => wp_capabilities
[roles] => Array
(
[0] => browns
)
[allcaps] => Array
(
[read] => 1
[browns] => 1
)
[filter] =>
[site_id:WP_User:private] => 1
)
=== s2member level 1 groups: ===
Member
=== Discourse Group Addition Result: ===
WP_Error Object
(
[errors] => Array
(
[wpdc_response_error] => Array
(
[0] => An invalid response was returned from Discourse
)
)
[error_data] => Array
(
[wpdc_response_error] => Array
(
[http_code] => 404
[http_body] => {"errors":["The requested URL or resource could not be found."],"error_type":"not_found"}
)
)
[additional_data:protected] => Array
(
)
)
현재 WordPress 개발을 하고 있지 않아서 여러분의 코드를 테스트할 수 없습니다. 문제가 아래 부분에 있는 것 같습니다:
$result = DiscourseUtilities::add_user_to_discourse_group($user_id, $s2member_level_1_groups);
로그를 올바르게 읽고 있다면, 해당 호출은 다음을 반환하고 있습니다:
[error_data] => Array
(
[wpdc_response_error] => Array
(
[http_code] => 404
[http_body] => {"errors":["The requested URL or resource could not be found."],"error_type":"not_found"}
)
Discourse 사이트에서 이름이 "Member"인 그룹이 없어서 그런 문제라고 추측합니다.
여기서 정확히 무엇을 하고 있는지 모르겠지만, 이 부분은 오류와 관련이 없다고 생각합니다:
// 필요한 경우 추가 SSO 매개변수
$sso_params = array();
$sso_params = apply_filters('wpdc_sso_params', $sso_params, $user_data);
Haseeb_Ahmed님, 이 주제는 PHP 코딩에 대한 도움이 핵심 내용이라 Development 채널로 이동했습니다. 다음 주에 시간이 되면 코드를 좀 더 자세히 살펴보겠습니다.
hi @simon 그룹 이름을 변경해도 여전히 이 응답이 나와요
=== s2member level 1 groups: ===
staff
=== Discourse Group Addition Result: ===
WP_Error Object
(
[errors] => Array
(
[wpdc_response_error] => Array
(
[0] => An invalid response was returned from Discourse
)
)
[error_data] => Array
(
[wpdc_response_error] => Array
(
[http_code] => 404
[http_body] => {"errors":["The requested URL or resource could not be found."],"error_type":"not_found"}
)
)
[additional_data:protected] => Array
(
)
)