所以,到目前为止,这是我的代码:
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' => null,
)
);
}
function get_user_acf_fields( $object ) {
//get the id of the post object array
$grad = get_field('grad', 'user_32');
error_log($object);
return $grad;
}
function update_user_acf_fields( $value, $object, $field_name ) {
error_log($value);
error_log($field_name);
error_log($object);
}
现在,我希望在向get_user_acf_fields
端点发送GET请求时执行/users/
函数,并在向所述端点发送POST请求时运行update_user_acf_fields
。在这两种情况下,它都执行前get_user_acf_fields
函数。我在这里做错了什么?
答案 0 :(得分:2)
也许你没有包含正确的 nonce ?
对于制作手动Ajax请求的开发人员,需要使用nonce 随每个请求传递。 API使用动作设置为的nonce
wp_rest
。然后可以通过_wpnonce
数据将这些传递给API 参数(POST数据或GET请求的查询)或通过X-WP-Nonce
标题。 如果没有提供nonce,API将设置 当前用户为0,将请求转换为未经身份验证 请求,即使您已登录WordPress 。
- 详细了解https://developer.wordpress.org/rest-api/using-the-rest-api/authentication/
这是我使用高级自定义字段4.4.12在WordPress 4.9.5上修改和测试的代码。
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;
}
我here's the HTML and JS/AJAX用于测试上面的PHP代码。
答案 1 :(得分:0)
$ _ GET,$ _POST和UPDATE与其余API不同。由于更新不一定是语言的构造,它只是意味着当一个请求通常是$ _POST进入特定的"更新"它应该调用你的更新函数的标题。