J'écris un thème WordPress qui ajoute plusieurs champs personnalisés au profil utilisateur à l'aide de la fonction suivante
function add_contact_methods( $profile_fields ) {
// Add Social Media Fields
$profile_fields['facebook'] = esc_html_e( 'Facebook URL', 'jldc' );
);
return $profile_fields;
}
add_filter( 'user_contactmethods', 'add_contact_methods' );
Comment puis-je le relier à l'API REST (à l'aide de v2-ßeta13 du plug-in) afin que la valeur de ce champ soit renvoyée dans la réponse JSON du serveur?
J'ai trouvé un tutoriel dessus et j'ai fini avec le code résultant:
function facebook_add_user_data() {
register_api_field( 'user',
'facebook',
array(
'get_callback' => 'facebook_get_user_field',
'update_callback' => null,
'schema' => array(
'description' => 'User Facebook URL',
'type' => 'string',
'context' => array( 'view' ),
),
)
);
}
add_action( 'rest_api_init', 'facebook_add_user_data' );
function facebook_get_user_field( $user, $field_name, $request ) {
return get_user_meta( $user->id, $field_name);
}
Lorsque j'exécute la demande (../wp-json/wp/v2/users/2), les champs n'apparaissent pas.
Comment accrochez-vous ces champs?
J? ai compris. Il s'avère que le tutoriel que je regardais était vieux et que j'utilisais la mauvaise fonction WP. J'utilisais register_api_field
mais le bon à utiliser est register_rest_field
.
Ça va comme ça...
function facebook_add_user_data() {
register_rest_field( 'user',
'facebook',
array(
'get_callback' => 'rest_get_user_field',
'update_callback' => null,
'schema' => null,
)
);
}
add_action( 'rest_api_init', 'facebook_add_user_data' );
function rest_get_user_field( $user, $field_name, $request ) {
return get_user_meta( $user[ 'id' ], $field_name, true );
}
Je l'ai essayé et la réponse du serveur incluait le champ "facebook" et l'URL du profil de l'utilisateur.
De plus, la fonction facebook_get_user_field
peut en réalité être réutilisée, aussi je l'ai renommée rest_get_user_field
et l'ai testée avec un autre nom de champ, car elle a également généré ces données dans la réponse.