Salut, j’utilise le plugin wp discourse afin de synchroniser les utilisateurs entre le site Web WordPress et le formulaire de communauté discourse. J’utilise donc un code pour ajouter un utilisateur au groupe discourse lorsque l’utilisateur s’inscrit sur le site Web.
function mepr_capture_new_member_signup_completed($event) {
$user = $event->get_data();
$user_id = $user->ID;
// Obtenir les données de l'utilisateur en fonction de l'ID de l'utilisateur
$user_data = get_userdata($user_id);
// Journaliser les informations de débogage sur les données de l'utilisateur
log_debug_info("debug_log.txt", "Données utilisateur : ", print_r($user_data, true));
// Vérifier si les données de l'utilisateur existent
if ($user_data) {
// Obtenir les rôles de l'utilisateur
$roles = $user_data->roles;
// Vérifier si l'utilisateur n'a pas le rôle « browns » ou s'il l'a
if (!in_array('browns', $roles) || in_array('browns', $roles)) {
// Supprimer tous les rôles existants
foreach ($roles as $role) {
$user_data->remove_role($role);
}
// Ajouter le rôle « browns »
$user_data->add_role('browns');
log_debug_info("debug_log.txt", "Rôle Browns attribué : ", print_r($user_data, true));
if ( class_exists( '\\WPDiscourse\\Discourse\\Discourse' ) ) {
// Ajouter l'utilisateur au groupe Discourse pour « browns »
$s2member_level_1_groups = get_option('s2member_level_1_groups', '');
log_debug_info("debug_log.txt", "Groupes de niveau 1 s2member : ", print_r($s2member_level_1_groups, true));
// S'assurer que $s2member_level_1_groups n'est pas vide
if (!empty($s2member_level_1_groups)) {
$groups = explode(',', $s2member_level_1_groups);
foreach ($groups as $group) {
$group = trim($group); // Supprimer les espaces blancs des noms de groupe
log_debug_info("debug_log.txt", "Tentative d'ajout de l'utilisateur au groupe 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", "Échec de l'ajout au groupe Discourse : ", $error_message);
log_debug_info("debug_log.txt", "Données d'erreur : ", print_r($result->get_error_data(), true));
} else {
log_debug_info("debug_log.txt", "Ajout réussi au groupe Discourse : ", $group);
}
}
} else {
log_debug_info("debug_log.txt", "Aucun groupe Discourse trouvé dans les paramètres.", "");
}
}
// Paramètres SSO supplémentaires si nécessaire
$sso_params = array();
$sso_params = apply_filters('wpdc_sso_params', $sso_params, $user_data);
} else {
// Collecter tous les groupes de niveaux
$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', '');
// Combiner tous les groupes en un seul tableau
$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)
);
// Supprimer les doublons
$s2member_level_groups = array_unique($s2member_level_groups);
// Supprimer l'utilisateur de tous les groupes collectés
foreach ($s2member_level_groups as $group) {
$group = trim($group); // Supprimer les espaces blancs des noms de groupe
$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", "Échec de la suppression du groupe Discourse : ", $error_message);
} else {
log_debug_info("debug_log.txt", "Supprimé avec succès du groupe Discourse : ", $group);
}
}
}
} else {
// Gérer les cas où $user_id ou $role n'est pas fourni
// Cela pourrait être journalisé ou géré différemment selon vos besoins
// Pour l'instant, enregistrons un message
error_log("ID utilisateur ou rôle non fourni dans user_registered_callback.");
}
}
add_action('mepr-event-member-signup-completed', 'mepr_capture_new_member_signup_completed');
et voici la réponse que je reçois :
=== User Data: ===
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
)
=== Assigned Browns Role: ===
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
)
=== s2member level 1 groups: ===
Member,staff
=== Attempting to add user to Discourse group: ===
Member
=== Failed to add to Discourse Group: ===
Une réponse invalide a été retournée par Discourse
=== Error Data: ===
Array
(
[http_code] => 404
[http_body] => {"errors":["The requested URL or resource could not be found."],"error_type":"not_found"}
)
=== Attempting to add user to Discourse group: ===
staff
=== Failed to add to Discourse Group: ===
Une réponse invalide a été retournée par Discourse
=== Error Data: ===
Array
(
[http_code] => 404
[http_body] => {"errors":["The requested URL or resource could not be found."],"error_type":"not_found"}
)
et j’utilise également cette classe en haut du fichier functions.php
use WPDiscourse\Utilities\Utilities as DiscourseUtilities;
s’il vous plaît aidez-moi dans ce cas
Merci
