Содержимое
Продолжаем цикл статей посвященных REST API WordPress. И сегодня, мы научимся читать, создавать, редактировать и удалять данные категорий и терминов (это же касается и прочих кастомных таксономий, но рассмотрим это позже).
Работа с терминами будет практически аналогична работе с постами в прошлой статье, измениться лишь ссылка и параметры для выборки, создания и редактирования данных.
Как получить список категорий по REST API в WordPress
Чтобы прочитать данные категорий или тегов по АПИ, выполним следующий код:
$url = 'http://мой-сайт/wp-json/wp/v2/categories'; $response = wp_remote_get($url, [ 'body' => [ 'include' => [12, 13, 18], ] ]); $records = json_decode( wp_remote_retrieve_body($response), true ); echo '<strong>Code:</strong> ' . wp_remote_retrieve_response_code($response); echo '<br>'; echo '<strong>Message:</strong> ' . wp_remote_retrieve_response_message($response); echo '<br>'; echo '<strong>Records:</strong> ' . count($records); echo '<br>'; echo '<strong>Answer:</strong>'; echo "<pre>\$records = ";print_r($records);echo"</pre>"; die;
Разберем код построчно. Где:
wp_remote_get - выполняем CURL запрос с одного сайта на WP к другому WP сайту.
wp_remote_retrieve_body - т.к. в ответе мы получаем не только данные в html/txt/json/raw формате, но и заголовки, и прочую информацию. Нам нужно “изъять” данные с тела ответа.
json_decode - т.к. мы получили данные в JSON формате, декодируем их с помощью стандартной ф-и PHP
$records - содержит массив данных ответа
wp_remote_retrieve_response_code - вернет HTTP код ответа сервера
wp_remote_retrieve_response_message - вернет HTTP сообщение ответа сервера
Как создать тег или категорию с помощью REST API в ВордПресс
Не забываем, что для создания, редактирования и удаления данных по API нам нужно будет авторизироваться. И для этого нам нужен будет плагин “JSON Basic Authentication”, установите его.
Чтобы создать категорию, выполните следующий код:
/** Создание Категории */ $url = 'http://мой-сайт/wp-json/wp/v2/categories'; $username = 'admin'; $password = 'qweqwe'; $headers = [ 'Authorization' => 'Basic ' . base64_encode($username . ':' . $password), ]; $response = wp_remote_post($url, [ 'headers' => $headers, 'body' => [ 'name' => 'Test name category', 'description' => 'Test description category', 'slug' => 'test-name-category', ] ]); $records = json_decode(wp_remote_retrieve_body($response), true); echo"<pre>";print_r($records);echo"</pre>"; die;
Где:
$username - логин администратора сайта
$password - пароль администратора сайта
$headers - HTTP заголовок с данными для Basic авторизации
wp_remote_post - ф-я обертка над CURL для отправки POST данных
$records - ответ сервера в JSON формате. При успешном создании категории / тега - созданные данные
Создание тега WordPress по API, аналогично созданию категории:
/** Создание Тегов */ $url = 'http://мой-сайт/wp-json/wp/v2/tags'; $response = wp_remote_post($url, [ 'headers' => $headers, 'body' => [ 'name' => 'Test name tag', 'description' => 'Test description tag', 'slug' => 'test-name-tag', ] ]); $records = json_decode(wp_remote_retrieve_body($response), true); echo"<pre>";print_r($records);echo"</pre>"; die;
Разница лишь состоит в URL на который отправляются данные
Как в WordPress изменить категорию или тег через REST API
Давайте рассмотрим лишь пример с категорией (пример с тегом будет аналогичен, измениться лишь последний слаг URL, т.е. с “categories” на “tags”). Код примера следующий:
$url = 'http://мой-сайт/wp-json/wp/v2/categories/34'; $response = wp_remote_post($url, [ 'headers' => $headers, 'body' => [ 'name' => 'Test name category (updated: '.date('Y-m-d H:i:s').')', ] ]); $records = json_decode(wp_remote_retrieve_body($response), true); echo"<pre>";print_r($records);echo"</pre>"; die;
Обратите внимание на URL:
$url = 'http://мой-сайт/wp-json/wp/v2/categories/34';
в конце, где 34 - это ID категории данные которой мы хотим обновить.
А обновить мы можем все те же поля что использовали при создании категории (или термина): name, description, slug, parent.
Как удалить в WordPress category или tag посредством REST API
Рассмотрим пример с удалением тегов (категории удаляются аналогично, меняется лишь последний слаг на “categories”). И чтобы удаленно удалить тег, выполните следующий код:
$url = 'http://мой-сайт/wp-json/wp/v2/tags/31'; $response = wp_remote_request($url, [ 'method' => 'DELETE', 'headers' => $headers, 'body' => [ 'force' => true, ] ]); $records = json_decode(wp_remote_retrieve_body($response), true); echo"<pre>";print_r($records);echo"</pre>"; die;
Параметр “force” равный true, в массиве “body” обязателен. Он позволяет удалить данные без перемещения в корзину. А т.к. термины не имеют поддержки корзины. Отсутствие этого параметра может вызвать ошибку.
Переменная $records, будет содержать данные только что удаленного поста.