Je travaille sur une application personnalisée pour un client qui nécessite des champs supplémentaires dans le profil de l'utilisateur. J'ai créé avec succès une page d'inscription qui enregistre les champs personnalisés et je dois maintenant faire de même pour la page "Modifier le profil". La fonction que j’ai utilisée pour enregistrer les champs personnalisés lors de l’enregistrement est suffisamment générique pour que je pense pouvoir également l’utiliser pour la mise à jour. Je ne trouve pas le bon crochet pour le faire fonctionner, cependant. J'ai essayé "profile_update", "edit_user_profile_update" et "personal_options_update" sans succès. Y a-t-il quelque chose qui me manque ici?
Après avoir parcouru le code source de BP aujourd’hui, je crois que j’ai enfin compris. Le hook utilisé pour mettre à jour les champs de profil dans BuddyPress est "xprofile_data_before_save". Si quelqu'un sait quelque chose de mieux, s'il vous plaît faites le moi savoir!
Vous pouvez également utiliser la fonction de profils étendus incluse dans buddypress pour créer des groupes/champs de profils supplémentaires.
Ensuite, vous pouvez insérer tous les groupes dans la page d’enregistrement ou d’édition en remplaçant simplement la boucle.
<?php if ( function_exists( 'bp_has_profile' ) ) : if ( bp_has_profile( 'profile_group_id=1' ) ) : while ( bp_profile_groups() ) : bp_the_profile_group(); ?>
avec:
<?php if ( function_exists( 'bp_has_profile' ) ) : if ( bp_has_profile() ) : while ( bp_profile_groups() ) : bp_the_profile_group(); ?>
Avec cela, vous afficherez tous les groupes de profils dans la page d’enregistrement. Vous pouvez faire la même chose avec edit.php pour afficher tous les champs de la page de modification du profil.
Pour que cela fonctionne correctement, vous devez faire un petit Tweak. Vous devez sortir de la boucle, puis sauvegarder tous les identifiants de champs comme ceci:
Vous déplacez également ceci en dehors de la boucle afin qu'il ressemble:
<?php endwhile; endif; endif; ?>
<input type="hidden" name="signup_profile_field_ids" id="signup_profile_field_ids" value="<?php echo implode(",",$fields_ids);?>" />
</form>
La dernière partie consiste à vérifier que tous les champs sont enregistrés dans la base de données. J'espère que ça aide, j'ai utilisé sur edit.php mais cela devrait fonctionner de la même façon sur register.php
Cordialement