Ciao, sto usando il plugin wp discourse per sincronizzare gli utenti tra il sito Web WordPress e il modulo community di discourse. Qui sto usando un codice per aggiungere un utente al gruppo discourse quando l’utente si registra sul sito Web.
function mepr_capture_new_member_signup_completed($event) {
$user = $event->get_data();
$user_id = $user->ID;
// Ottieni i dati dell'utente in base all'ID utente
$user_data = get_userdata($user_id);
// Registra informazioni di debug sui dati dell'utente
log_debug_info("debug_log.txt", "Dati utente: ", print_r($user_data, true));
// Verifica se i dati dell'utente esistono
if ($user_data) {
// Ottieni i ruoli dell'utente
$roles = $user_data->roles;
// Verifica se l'utente non ha il ruolo "browns" o lo ha
if (!in_array('browns', $roles) || in_array('browns', $roles)) {
// Rimuovi tutti i ruoli esistenti
foreach ($roles as $role) {
$user_data->remove_role($role);
}
// Aggiungi il ruolo "browns"
$user_data->add_role('browns');
log_debug_info("debug_log.txt", "Ruolo Browns assegnato: ", print_r($user_data, true));
if ( class_exists( '\\WPDiscourse\\Discourse\\Discourse' ) ) {
// Aggiungi l'utente al gruppo Discourse per "browns"
$s2member_level_1_groups = get_option('s2member_level_1_groups', '');
log_debug_info("debug_log.txt", "Gruppi di livello 1 di s2member: ", print_r($s2member_level_1_groups, true));
// Assicurati che $s2member_level_1_groups non sia vuoto
if (!empty($s2member_level_1_groups)) {
$groups = explode(',', $s2member_level_1_groups);
foreach ($groups as $group) {
$group = trim($group); // Rimuovi spazi bianchi dai nomi dei gruppi
log_debug_info("debug_log.txt", "Tentativo di aggiungere l'utente al gruppo Discourse: ", $group);
$result = DiscourseUtilities::add_user_to_discourse_group($user_id, $group);
if (is_wp_error($result)) {
$error_message = $result->get_error_message();
log_debug_info("debug_log.txt", "Impossibile aggiungere al gruppo Discourse: ", $error_message);
log_debug_info("debug_log.txt", "Dati errore: ", print_r($result->get_error_data(), true));
} else {
log_debug_info("debug_log.txt", "Aggiunto con successo al gruppo Discourse: ", $group);
}
}
} else {
log_debug_info("debug_log.txt", "Nessun gruppo Discourse trovato nelle impostazioni.", "");
}
}
// Parametri SSO aggiuntivi se necessari
$sso_params = array();
$sso_params = apply_filters('wpdc_sso_params', $sso_params, $user_data);
} else {
// Raccogli tutti i gruppi di livello
$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', '');
// Combina tutti i gruppi in un unico 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)
);
// Rimuovi duplicati
$s2member_level_groups = array_unique($s2member_level_groups);
// Rimuovi l'utente da tutti i gruppi raccolti
foreach ($s2member_level_groups as $group) {
$group = trim($group); // Rimuovi spazi bianchi dai nomi dei gruppi
$result = DiscourseUtilities::remove_user_from_discourse_group($user_id, $group);
if (is_wp_error($result)) {
$error_message = $result->get_error_message();
log_debug_info("debug_log.txt", "Impossibile rimuovere dal gruppo Discourse: ", $error_message);
} else {
log_debug_info("debug_log.txt", "Rimosso con successo dal gruppo Discourse: ", $group);
}
}
}
} else {
// Gestisci i casi in cui $user_id o $role non vengono forniti
// Questo potrebbe essere registrato o gestito diversamente in base ai tuoi requisiti
// Per ora, registriamo un messaggio
error_log("ID utente o ruolo non fornito in user_registered_callback.");
}
}
add_action('mepr-event-member-signup-completed', 'mepr_capture_new_member_signup_completed');
e qui c’è la risposta che sto ricevendo:
=== Dati utente: ===
WP_User Object
(
[data] => stdClass Object
(
[ID] => 463
[user_login] => sibahmed
[user_pass] => $P$BqaZsm5xZuNLEt2oWmypNGQ1QRyoUU0
[user_nicename] => sibahmed
[user_email] => sibahmed82@gmail.com
[user_url] =>
[user_registered] => 2024-08-04 09:42:50
[user_activation_key] =>
[user_status] => 0
[display_name] => sib ahmed
)
[ID] => 463
[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
)
=== Ruolo Browns assegnato: ===
WP_User Object
(
[data] => stdClass Object
(
[ID] => 463
[user_login] => sibahmed
[user_pass] => $P$BqaZsm5xZuNLEt2oWmypNGQ1QRyoUU0
[user_nicename] => sibahmed
[user_email] => sibahmed82@gmail.com
[user_url] =>
[user_registered] => 2024-08-04 09:42:50
[user_activation_key] =>
[user_status] => 0
[display_name] => sib ahmed
[user_level] => 0
)
[ID] => 463
[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
)
=== Gruppi di livello 1 di s2member: ===
Member,staff
=== Tentativo di aggiungere l'utente al gruppo Discourse: ===
Member
=== Impossibile aggiungere al gruppo Discourse: ===
È stata restituita una risposta non valida da Discourse
=== Dati errore: ===
Array
(
[http_code] => 404
[http_body] => {"errors":["The requested URL or resource could not be found."],"error_type":"not_found"}
)
=== Tentativo di aggiungere l'utente al gruppo Discourse: ===
staff
=== Impossibile aggiungere al gruppo Discourse: ===
È stata restituita una risposta non valida da Discourse
=== Dati errore: ===
Array
(
[http_code] => 404
[http_body] => {"errors":["The requested URL or resource could not be found."],"error_type":"not_found"}
)
sto usando anche questa classe all’inizio del file functions.php
use WPDiscourse\Utilities\Utilities as DiscourseUtilities;
per favore aiutami in questo caso.
Grazie
