Как сохранить массив значений с помощью запроса POST?(Wordpress API) - PullRequest
0 голосов
/ 08 июня 2018

Я пытаюсь работать с Wordpress API, чтобы обновить информацию пользователя через POST-запрос.Информация хранится в пользовательском поле JSON, которое я зарегистрировал следующим образом:

public function handle_user_info() {
    register_rest_field( 'user', 'personal_info', array(
        'get_callback' => array( $this, 'get_user_info_callback' ),
        'update_callback' => array( $this, 'post_user_info_callback' ),
        'schema' => null 
    ));        
} 

Вот обратный вызов GET:

public function get_user_info_callback( $user ) {  
    $userID = $user[ 'id' ]; 
    return array(
        'rcp_user_first' => get_user_meta( $userID, 'rcp_user_first', true ),
        'rcp_user_last' => get_user_meta( $userID, 'rcp_user_last', true ),
        'rcp_user_location' => get_user_meta( $userID, 'rcp_user_location', true ),
        'rcp_postal_address' => get_user_meta( $userID, 'rcp_postal_address', true ),
        'rcp_email' => get_userdata( $userID )->user_login
    );           
}

Все вышеперечисленное работает нормально.Когда я делаю запрос GET, вот что возвращается (сокращенная версия):

{
    "id": 1,
    "name": "John",
    "url": "http://example.com",
    "description": "",
    "slug": "admin",

    ...

    "personal_info": {
        "rcp_user_first": "John",
        "rcp_user_last": "Doe",
        "rcp_user_location": "EU",
        "rcp_postal_address": "101 Fake Street",
        "rcp_email": "admin@example.com"
    }

    ...

}

Моя проблема с обратным вызовом POST.Я не могу понять, как написать его, чтобы обновить значения в поле personal_info.Я предположил, что что-то вроде этого будет работать:

public function post_user_info_callback( $value, $user, $fieldName ) { 

    return array(
        'rcp_user_first' => update_user_meta( 1, 'rcp_user_first', 'Mark' ),
        'rcp_user_last' => update_user_meta( 1, 'rcp_user_last', 'Smith' ),
        'rcp_user_location' => update_user_meta( 1, 'rcp_user_location', 'NON_EU' ),
        'rcp_postal_address' => update_user_meta( 1, 'rcp_postal_address', '202 Fantasy Street' )
    );           

}

Однако это не работает.Кстати, сейчас я тестирую только с Postman, поэтому я использую статические данные, поэтому здесь 1 обозначает идентификатор пользователя.

Есть идеи?

1 Ответ

0 голосов
/ 08 июня 2018

Сначала вам нужно убедиться, что вы POST со значением personal_info, чтобы выполнялся обратный вызов.

Например, добавьте в почтальон personal_info[rcp_user_first] с некоторым значением.Теперь обратный вызов будет запущен, и ваши статические данные обновятся.

И затем вы можете написать некоторую функцию, которая обновляет динамически каждую пару ключей и значений пользователя.

public function post_user_info_callback( $value, $user, $fieldName ) {

    $defaultKeys = [
        'rcp_user_first' => '',
        'rcp_user_last' => '',
        'rcp_user_location' => '',
        'rcp_postal_address' => ''
    ];

    // filter the value so that we get only our specific keys that we want to update
    $valueArray = array_filter( array_merge( $defaultKeys, array_intersect_key( $value, $defaultKeys ) ) );

    $updateArray = [];
    foreach($valueArray as $key=>$val) {

        // Here you can add another validation for values.
        $updateArray[$key] = update_user_meta($user->ID, $key, $val);
    }

    return $updateArray;

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...