Comment ajouter, mettre à jour et récupérer des champs de méta utilisateur avec l'API wp? J'ai ajouté une fonction pour ajouter un numéro de téléphone de champ méta à un utilisateur. Une telle fonction est-elle nécessaire pour ajouter des méta-valeurs au méta-objet? La fonction n'ajoute pas le champ à l'objet méta dans la réponse de l'API, mais l'ajoute comme nouveau champ.
La fonction que j'ai maintenant:
<?php
function portal_add_user_field() {
register_rest_field( 'user', 'phonenumber',
array(
'get_callback' => function( $user, $field_name, $request ) {
return get_user_meta( $user[ 'id' ], $field_name, true );
},
'update_callback' => function( $user, $meta_key, $meta_value, $prev_value ) {
$ret = update_user_meta( array( $user, $meta_key, $meta_value );
return true;
},
'schema' => array(
'description' => __( 'user phonenumber' ),
'type' => 'string'
),
)
);
}
add_action( 'rest_api_init', 'portal_add_user_field' );
J'ai également essayé d'ajouter le champ de numéro de téléphone à la méta de l'utilisateur avec ajax sans une fonction supplémentaire comme celle-ci: (cela n'enregistre pas le champ du numéro de téléphone)
updateUser: function () {
var data = {
username: this.username,
email: this.email,
first_name: this.firstname,
last_name: this.lastname,
meta: {
phonenumber: this.phonenumber
}
};
console.log(data);
$.ajax({
method: "POST",
url: wpApiSettings.current_domain + '/wp-json/wp/v2/users/' + wpApiSettings.current_user.ID,
data: data,
beforeSend: function ( xhr ) {
xhr.setRequestHeader( 'X-WP-Nonce', wpApiSettings.nonce );
}
})
.done( $.proxy( function() {
alert('Account saved');
}, this ))
.fail( $.proxy( function( response ) {
alert('something went wrong');
}, this ));
trouvé, d'abord oui pour les métadonnées sur un utilisateur, vous aurez besoin d'une fonction personnalisée comme celle-ci:
<?php
function portal_add_user_field() {
register_rest_field( 'user', 'userfields',
array(
'get_callback' => function( $user, $field_name, $request ) {
return get_user_meta( $user[ 'id' ], $field_name, true );
},
'update_callback' => function($meta_value ) {
$havemetafield = get_user_meta(1, 'userfields', false);
if ($havemetafield) {
$ret = update_user_meta(1, 'userfields', $meta_value );
return true;
} else {
$ret = add_user_meta( 1, 'userfields', $meta_value ,true );
return true;
}
},
'schema' => null
)
);
}
add_action( 'rest_api_init', 'portal_add_user_field', 10, 2 );
?>
après cela avec ajax envoyez le comme ceci:
updateUser: function () {
var data = {
userfields: {
somefield: this.somefield,
somefield2: this.somefield2
}
};
console.log(data);
$.ajax({
method: "POST",
url: wpApiSettings.current_domain + '/wp-json/wp/v2/users/' + wpApiSettings.current_user.ID,
data: data,
beforeSend: function ( xhr ) {
xhr.setRequestHeader( 'X-WP-Nonce', wpApiSettings.nonce );
}
})
.done( $.proxy( function() {
alert('Account saved');
}, this ))
.fail( $.proxy( function( response ) {
alert('something went wrong');
}, this ));
}
J'ai réussi à faire cela avec la connexion dans rest_insert_user
. J'envoie un tableau comme celui-ci:
var data = {
first_name: user.first_name,
last_name: user.last_name,
name: user.display_name,
email: user.email,
description: user.description,
meta: {
'wpcf-phone': user.phone,
'wpcf-institution': user.institution,
'wpcf-birthday': Math.round(new Date(user.birthday).getTime()/1000)
}
};
Et ne traitez que les métadonnées du crochet comme ceci:
function aa_user_update($user, $request, $create)
{
if ($request['meta']) {
$user_id = $user->ID;
foreach ($request['meta'] as $key => $value) {
update_user_meta( $user_id, $key, $value );
}
}
}
add_action( 'rest_insert_user', 'aa_user_update', 12, 3 );
Les champs ordinaires de l'utilisateur sont mis à jour normalement par l'API.