web-dev-qa-db-fra.com

Comment puis-je ajouter un champ personnalisé d'utilisateur à REST Réponse de l'API?

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?

2
Cedon

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.

5
Cedon