Як у WordPress за REST API отримати, створити, змінити чи видалити метадані

Як у WordPress за REST API отримати, створити, змінити чи видалити метадані

Сьогодні розглянемо ще одну корисну можливість — як працювати з мета-даними постів або термінів через API. Як і у випадку з створенням даних через API, у WordPress за замовчуванням немає підтримки взаємодії з мета-полями. Для цього доведеться встановити сторонній плагін. На жаль, мені не вдалося знайти його на GitHub — можливо, його перенесли в інше місце або він був "змігрований" до репозиторію WordPress. Але оскільки плагін у мене збережений у вигляді архіву, у цій статті ми все ж його використаємо (посилання на завантаження плагіна є в тексті). Впевнений, щось подібне можна знайти і в офіційному репозиторії WP з хорошими відгуками.

Як отримати мета-дані постів через REST API

Як і в попередніх статтях цієї тематики, наш код буде майже ідентичним:

$url = //мой-сайт/wp-json/wp/v2/posts/2694/meta';
$response = wp_remote_get($url, [
	'headers' => $headers,
]);
$records = json_decode(
	wp_remote_retrieve_body($response), 
	true
);
echo"<pre style='dir:ltr;text-align:left'>";print_r($records);echo"</pre>";
die;

Зверніть увагу на URL — перед останнім сегментом meta ми вказуємо ID поста, мета-дані якого хочемо отримати. Також обов'язково передати заголовки з даними для авторизації (див. попередні публікації).

У відповіді сервера буде список усіх мета-полів. Водночас повертаються лише «публічні» поля, тобто ті, чиї ключі не починаються з підкреслення “_”.

Як отримати мета-дані категорій у WordPress

Різниця між отриманням даних постів і категорій (тегів чи інших термінів) полягає лише в URL запиту.
Якщо для постів URL виглядає так:
//мій-сайт/wp-json/wp/v2/posts/{post_ID}/meta

То для категорій:
//мій-сайт/wp-json/wp/v2/categories/{category_ID}/meta

Для тегів:
//мій-сайт/wp-json/wp/v2/tags/{tag_ID}/meta

Для будь-якої іншої таксономії:
//мій-сайт/wp-json/wp/v2/{taxonomy_name}/{term_ID}/meta

Приклад:

$username = 'admin';
$password = 'qweqwe';
$headers = [
	'Authorization' => 'Basic ' . base64_encode($username . ':' . $password),
];
$response = wp_remote_get('//мой-сайт/wp-json/wp/v2/categories/14/meta', [
	'headers' => $headers,
]);

Як додати мета-дані до поста через REST API WordPress

Щоб додати нові мета-дані в базу даних через API, виконайте наступний код:

$url = '//мой-сайт/wp-json/wp/v2/posts/2694/meta';
$response = wp_remote_post($url, [
	'headers' => $headers,
	'body' => [
		'key' => 'blue',
		'value' => 'lightsaber_color',
	]
]);
$records = json_decode(
	wp_remote_retrieve_body($response), 
	true
);
echo"<pre style='dir:ltr;text-align:left'>";print_r($records);echo"</pre>";
die;

Як і в попередніх випадках, потрібно передати авторизаційні дані в заголовках запиту (масив headers). У body вказуємо ключ і значення для створюваного мета-поля. Зверніть увагу на URL — там має бути ID поста, до якого додаються дані. Метод запиту — POST.

Редагування мета-даних у WordPress через REST API

Щоб оновити мета-поле, потрібно вказати в URL як ID поста, до якого належить поле, так і ID самого мета-поля. Ми можемо змінити як ключ, так і значення — це досить зручно.

$url = '//мой-сайт/wp-json/wp/v2/posts/2694/meta/11723';
$response = wp_remote_post($url, [
	'headers' => $headers,
	'body' => [
		'key' => 'color',
		'value' => 'red',
	]
]);
$records = json_decode(
	wp_remote_retrieve_body($response), 
	true
);
echo"<pre style='dir:ltr;text-align:left'>";print_r($records);echo"</pre>";
die;

ID мета-поля можна дізнатися, зробивши запит на отримання списку всіх мета-полів поста.

Як видалити мета-дані у WordPress через REST API

Для видалення даних використовується той самий URL, що й для редагування. Метод запиту при цьому має бути DELETE:

$url = '//мой-сайт/wp-json/wp/v2/posts/2694/meta/11723';
$response = wp_remote_request($url, [
	'method' => 'DELETE',
	'headers' => $headers,
	'body' => [
		'force' => true,
	]
]);

У відповіді сервер поверне повідомлення про успішне видалення відповідного мета-поля.

На цьому все.

Пости на схожі теми

З вашим WordPress сайтом проблеми? потрібний додатковий функціонал? нестандартний плагін чи згорнути нову сторінку?
Тоді напишіть мені через форму зворотного зв'язку, і я намагатимусь вам допомогти.

Напишіть коментар

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *