2017-08-22 5 views
1

Je crée un plugin wordpress qui doit saisir le nom de l'utilisateur lors de l'enregistrement lorsqu'il est intégré à BuddyPress. Malheureusement, le champ Name ne retourne jamais rien. Le code suivant s'exécute dans le crochet user_register.Récupère le champ de profil "Nom" de buddypress dans le crochet user_register

add_action('user_register', 'ts_api_registration_save', 9999999, 1); 
function ts_api_registration_save($user_id) 
{ 
    $info = get_userdata($user_id); 
    $name = bp_profile_field_data(array('field' => 'Name', 'user_id' => $info->ID)); 
} 

Malheureusement $name est toujours vide. J'ai vérifié la base de données, et le champ Nom est le seul dans bp_xprofile_fields, donc je sais qu'il existe.
J'ai également confirmé que $info->ID n'est pas vide, et qu'il contient correctement un identifiant d'utilisateur. Une idée de pourquoi cela ne fonctionne pas?

En attendant, je suis en mesure de le faire pour obtenir ce que je veux:

$results = $GLOBALS['wpdb']->get_results('SELECT * FROM ' . $wpdb->prefix . "bp_xprofile_fields WHERE name = 'Name'"); 
$fullName = $_POST["field_" . $nameFieldId]; 

Mais ce n'est pas optimale.

Répondre

0

Essayez d'utiliser xprofile_get_field_data() au lieu de bp_profile_field_data()

Par exemple:

$name = xprofile_get_field_data('Name', $user_id, $multi_format = 'comma'); 
echo $name; 

http://hookr.io/functions/xprofile_get_field_data/

Une autre solution

Essayez de passer le champ id plutôt que le nom du champ.

$value = xprofile_get_field_data($field_id, $user_id); 

Vous pouvez obtenir le champ id en regardant l'URL dans wp-admin lorsque vous modifiez ce champ, ou juste rouler sur le bouton d'édition.

+0

Je ne pense pas que cette fonction existe. Quand je l'exécute, j'obtiens: "Le nom de la fonction doit être une chaîne". Cette fonction doit avoir changé dans les nouvelles versions de BP – user3413723

+0

Ma réponse a été mise à jour –

+0

J'ai aussi essayé celui-ci, toujours pas de chance ... Peut-être que les champs de profil ne sont pas définis avant l'exécution de user_register ou quelque chose comme ça. – user3413723

0

Cette fonction ne fonctionne que dans le contexte d'une page de profil d'utilisateur: bp_profile_field_data

Au lieu de cela, essayez d'utiliser xprofile_get_field_data

également - le crochet « de user_register » fonctionne probablement trop tôt. Essayez d'utiliser l'un de ces crochets:

bp_core_signup_user 
bp_signup_pre_validate 
bp_signup_usermeta