update_callback не вызывает соответствующую функцию при отправке сообщения - PullRequest
0 голосов
/ 15 мая 2018

Итак, вот мой код:

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/ и update_user_acf_fields длязапускается, когда я отправляю запрос POST к указанной конечной точке.В обоих случаях он выполняет прежнюю get_user_acf_fields функцию.Что я тут не так делаю?

Ответы [ 2 ]

0 голосов
/ 23 мая 2018

Возможно, вы не указали правильный 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.

0 голосов
/ 22 мая 2018

$ _ GET, $ _POST и UPDATE - это разные вещи для остальных API.Поскольку обновление не обязательно является структурой языка, это просто означает, что когда запрос обычно получает $ _POST с определенным заголовком «Обновление», он должен вызывать вашу функцию обновления.

...