¿Cómo agrego el campo personalizado del usuario a la respuesta de la API REST?

2

Estoy escribiendo un tema de WordPress que agrega varios campos personalizados al perfil de usuario usando la siguiente función

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' );

¿Cómo conecto esto en la API REST (utilizando v2-ßeta13 del complemento) para que el valor de este campo se devuelva en la respuesta JSON del servidor?

Encontré un tutorial y terminé con el código resultante:

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);
}

Cuando ejecuto la solicitud (../wp-json/wp/v2/users/2) los campos no aparecen.

¿Cómo conectas estos campos?

    
pregunta Cedon 10.04.2016 - 03:03

1 respuesta

5

Lo tengo. Resulta que el tutorial que estaba viendo era antiguo y estaba usando la función WP incorrecta. Estaba usando register_api_field pero el correcto para usar es register_rest_field .

Va así ...

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 );
}

Lo probé y la respuesta del servidor incluyó el campo "facebook" y la URL del perfil del usuario.

Además, la función facebook_get_user_field puede realmente reutilizarse, así que le cambié el nombre a rest_get_user_field y la probé con otro nombre de campo y produjo los datos en la respuesta también.

    
respondido por el Cedon 10.04.2016 - 23:09

Lea otras preguntas en las etiquetas