Ich schreibe ein WordPress-Theme, das dem Benutzerprofil mit der folgenden Funktion mehrere benutzerdefinierte Felder hinzufügt
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' );
Wie binde ich dies in die REST -API ein (mithilfe von v2-ßeta13 des Plug-ins), sodass der Wert dieses Felds in der JSON-Antwort vom Server zurückgegeben wird?
Daraufhin habe ich ein Tutorial gefunden und am Ende den folgenden Code erhalten:
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);
}
Wenn ich die Anfrage starte (../wp-json/wp/v2/users/2), erscheinen die Felder nicht.
Wie hakt man diese Felder ein?
Ich habe es verstanden. Es stellte sich heraus, dass das Tutorial, das ich mir ansah, alt war und ich die falsche Funktion WP verwendete. Ich habe register_api_field
verwendet, aber der richtige Code ist register_rest_field
.
Es geht so...
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 );
}
Ich habe es ausprobiert und die Antwort vom Server enthielt das Feld "Facebook" und die URL aus dem Benutzerprofil.
Außerdem kann die Funktion facebook_get_user_field
tatsächlich wiederverwendet werden, also habe ich sie in rest_get_user_field
umbenannt und mit einem anderen Feldnamen getestet und diese Daten auch in der Antwort erzeugt.