Обновление метаданных CPT с использованием REST API

Я пытаюсь обновить метаданные сообщения CPT, используя REST API. Я могу обновить элемент числовой метаданных, используя POST, например:

example.com/wp-json/wp/v2/posts/73/meta/229?value=2

Этот метод основан на обходном пути, найденном здесь: WP REST API" rest_no_route "при попытке обновления мета

Я также могу обновить метаданные, используя сообщение здесь: example.com/wp-json/wp/v2/posts/73/meta/229

с этим JSON в теле:

{"value":"2"}

Однако поле, которое мне нужно обновить, содержит сериализованный массив данных. Когда я пытаюсь обновить поле, используя второй метод (тело JSON), я получаю эту ошибку:

{"value": [
{
  "name": "Related Documents",
  "default": true,
  "documents": [
    {
      "label": "RFA - Revit File",
      "file_location": "http://example.com/wp-content/uploads/2017/03/file.pdf"
    }
  ]
}
]
}

Я также попытался отправить свои данные в виде сериализованного массива (так он хранится в MySql).

Когда я отправляю:

{"value": "{a:0}"}

Я получаю:

{
"code": "rest_post_invalid_action",
"message": "Invalid existing meta data for action.",
"data": {
"status": 400
}
}

Примечания: Эти метаданные являются полем, который является частью плагина WooCommerce: https://woocommerce.com/products/product- документы /

У меня установлен этот плагин, чтобы разоблачить мои пользовательские типы сообщений API (и я могу ВОЗВРАТИТЬ данные): wordpress.org/plugins/wp-rest-api-controller/

У меня также установлен этот плагин для доступа к конечным точкам meta: wordpress.org /плагины /отдых-апи-мета-конечные точки /

Моя конечная цель заключается в заполнении новых данных в базе данных MySql для этого настраиваемого поля. Я изучаю, что WP REST API по-прежнему очень недокументирован и довольно слаб, когда речь заходит о метаданных, особенно (1) для пользовательских типов сообщений и (2) для нестроковых /числовых типов данных.

Я рассматриваю возможность написания базовой страницы PHP, которая возьмет идентификатор продукта, найдет правильную мета-запись с помощью функции WordPress и обновит данные, включив JSON в сериализованный массив, но я недостаточно знаком с PHP, чтобы сделать это, и я также должен учитывать некоторые вещи безопасности. Любые примеры или идеи о том, как это начать, или если есть лучший способ обновить мои метаданные?

7 голосов | спросил Chet at C2IT 11 Maypm17 2017, 17:01:20

1 ответ


4

На начальных проблемах, вы уверены, что плагин регистрирует поля, которые будут доступны для api? register_meta требуется show_in_rest => true.

Кроме того, CPT нуждается в custom-fields в своем массиве поддержки, 'supports' => array('title','editor','thumbnail','custom-fields'), чтобы это было доступно при доступе к конечной точке API CPTs.

Я рассказываю об этом (со ссылками и т. д.) в этом ответе на другой вопрос: https://wordpress.stackexchange.com/a/266277/118366

Если какое-либо из этих значений отсутствует, вы можете подключиться, чтобы добавить их или вообще полностью перезаписать. Просто мысль.

  

Я рассматриваю возможность написания базовой страницы PHP, которая возьмет идентификатор продукта, найдет правильную мета-запись с помощью функции WordPress и обновит данные, включив JSON в сериализованный массив, но я недостаточно знаком с PHP для этого

Для этого загляните в json_decode и json_encode. Вы можете установить аргумент assoc в true с помощью json_decode и получить массив, а не объект.

Функция (непроверенная) быстрого примера получения некоторого json и установки декодированных результатов в переменную:

$json = file_get_contents('PATH/TO/FILE.json');
function the_json_contents($json_to_get){

            $json_in_array = json_decode($json_to_get, true); //json string to array

            return $json_in_array;
        }
function do_stuff_do_json() {
    $json_array = the_json_contents($json);
    foreach($json_array['id'] as $js) { //assuming we have an 'id' key
        $somevariable  = $js['someKey'];
        $somevariable2 = $js['someOtherKey'];
    } 

}
  

Любые примеры или идеи о том, как это начать, хотя или если   есть лучший способ обновить мои метаданные?

Пользовательский маршрут и конечная точка могут быть наиболее эффективным способом сделать это (предполагая, что не только плагин не разоблачил эти элементы в api, как упоминалось выше). Вам все равно придется принимать во внимание проверки nonce и другую возможную аутентификацию в зависимости от того, как вы используете конечные точки. Маршруты и конечные точки и Пользовательские конечные точки - это то, что вы ищете в документации api; вероятно, Классы контроллера .

Опять же, я бы проверил плагин, чтобы увидеть, есть ли у него мета-поля, зарегистрированные для api, как указано ранее.

ответил hwl 13 Mayam17 2017, 00:38:19

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132