发送帖子时,update_callback没有调用正确的函数

时间:2018-05-15 05:06:44

标签: wordpress wordpress-rest-api

所以,到目前为止,这是我的代码:

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函数。我在这里做错了什么?

2 个答案:

答案 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进入特定的"更新"它应该调用你的更新函数的标题。