Возможно, вы не указали правильный nonce ?
Для разработчиков, выполняющих запросы Ajax вручную, nonce необходимо будет передавать с каждым запросом.API использует одноразовые номера с установленным действием wp_rest
.Затем они могут быть переданы в API через параметр данных _wpnonce
(либо данные POST, либо в запросе для запросов GET), либо через заголовок X-WP-Nonce
. Если нет одноразового номера, API установит для текущего пользователя значение 0, превратив запрос в неаутентифицированный запрос , , даже если вы вошли в WordPress .
- Подробнее о https://developer.wordpress.org/rest-api/using-the-rest-api/authentication/
Вот ваш код, который я модифицировал и протестировал, работая над WordPress 4.9.5 с расширенными настраиваемыми полями 4.4.12.
add_action( 'rest_api_init', 'rest_api_user_meta_fields' );
function rest_api_user_meta_fields() {
// register_rest_field ( 'name-of-post-type', 'name-of-field-to-return', array-of-callbacks-and-schema() )
register_rest_field( 'user', 'grad', array(
'get_callback' => 'get_user_acf_fields',
'update_callback' => 'update_user_acf_fields',
'schema' => [
'description' => 'User grad blah',
'type' => 'string',
],
)
);
}
// $user_arr is an `array` of the user data; e.g. `id`, `username`, and `name`.
// $field_name is the name of the ACF custom field; i.e. in this case, it's `grad`.
function get_user_acf_fields( $user_arr, $field_name ) {
// Get the value of the 'grad' custom field.
$grad = get_field($field_name, 'user_' . $user_arr['id']);
error_log(var_export( $user_arr, true ));
error_log($field_name);
//return $grad;
return $field_name . ';' . $grad . ';' . $user_arr['id'];
}
// $field_value is the value of the ACF custom field; i.e. in this case, it's `grad`.
// $user_obj is an `object` of the user data; e.g. `id`, `username`, and `name`.
function update_user_acf_fields( $field_value, $user_obj, $field_name ) {
// Get the value of the 'grad' custom field.
$grad = get_field($field_name, 'user_' . $user_obj->ID);
if ( $grad !== $field_value ) {
update_field( $field_name, $field_value, 'user_' . $user_obj->ID );
}
error_log($field_value);
error_log($field_name);
error_log(var_export( $user_obj, true ));
return true;
}
И - вот HTML и JS / AJAX , которые я использовал для тестирования приведенного выше кода PHP.