Взаємодія з апі wordpress

02.07.2023 | Андрей
PHP клас для роботи з API WORDPRESS

Трошки вхідної інформації: виникла потреба в створені великої кількості контенту на базі вордпрес. Відразу з'явилось рішення - використання REST API яке є у вордпрес із коробки. Після декількох спроб встановлення та налаштування різних бібліотек для роботи з апі вордпрес стало зрозуміло, що нормального легкого класу який задовольняє мої потреби просто немає. Мені було потрібно наступне:

  • Створення постів, категорій, авторів, коментарів, тегів та сторінок;
  • Оновлення та видалення вище зазначених об'єктів;
  • Завантаження медіа;
  • Швидкий старт роботи класу будь де.

Тому було прийняте рішення створити свій легкий клас для роботи з апі вордпрес. Цей пост, це коротка інструкція яз взаємодіяти з апі вордпрес використовуючи клас на php.

Посилання на git

Підготовка WP

Для використання апі вп потрібно встановити та активувати плагін Application Password, яке дає змогу генерувати ключ для взаємодії. Якщо версія вп 6.2.2 і вище тоді плагін встановювати не потрібно, він вже реалізований.

Перейдіть на сторінку Users - Profile та спустіться вниз до блоку "Application Passwords" введіть назву ключа та натисніть на "Add New Application Password". З'явится вікно з паролем, скопіюйте його.

PHP клас для роботи з API WORDPRESS

Якщо в блоці з паролем відображена помилка як на скріншоті, тоді відкрийте файл .htaccess в корні сайту та додайте виділений фрагмент в свій файл.


# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule .* - [E=REMOTE_USER:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
 

Важливо, щоб сайт вже працював через протокол HTTPS, тобто мав sll інакше апі не заведеться.

Якщо всі етапи пройшли чітко - тепер є можливість взаємодіяти з апі вп.

Підготовка скрипта для взаємодії з апі wp

Створіть файл та інкудіть в нього збережний клас. Додайте перемінні з доступами до апі.



// Клас
require __DIR__.'/s-client.php';

/* AUTH */
$url  = 'https://domain.codes/wp-json/wp/v2'; // адреса сайту
$user = 'admin'; // логін
$pass = '3Ze7 1234 a4kQ 8080 1235 MA0T'; // пароль з application passwords

/* api client */
$wp_client = new wp_api($url, $user, $pass);


Отримання списку постів через апі wp

Щоб отмати список постів, викликайте фукцію без додаткових параметрів. У перемінній $allPosts буде список створених постів.



$allPosts = $wp_client->posts();
// з параметрами: номер сторінки та кількість
$posts = $wp_client->posts('', array('per_page' => 100, 'page' => 1));


Щоб отримати 1 пост потрібно викликати функцію getPost(post_id), приклад:



$post_id = 46;
$post = $wp_client->getPost($post_id);


Створення посту через апі wp

Підготуйте масив даних для створення посту, детально про доступні параметри можете ознайомитись на офіційному сайті wp api



$addPost = [
	'date'     => $date_added,
	'modified' => $date_modified,
	'link'    => $page_url,
	'slug'    => $page_url,
	'status'  => 'publish',
	'title'   => $name,
	'content' => $content,
	'author'  => $author_id,
	'ping_status'  => 'open',
	'categories'   => array($category_id),
	'tags'         => array()
];

$post_data = $wp_client->posts('add', $addPost);


В результат $post_data буде повернуто масив з помилкою, якщо щось пішло не так або масив з мета даними створеного посту.

$post_id = (isset($post_data['id']) ? $post_data['id'] : 'failed');

Оновлення посту через апі wp

Все аналогічно із створенням та потрібно в масив даних посту додати id посту який треба модифікувати та змінити параметр у функції на 'update', приклад



$updPost = [
	'id'       => 46,
	'date'     => $date_added,
	'modified' => $date_modified,
	'link'    => $page_url,
	'slug'    => $page_url,
	'status'  => 'publish',
	'title'   => $name,
	'content' => $content,
	'author'  => $author_id,
	'ping_status'  => 'open',
	'categories'   => array($category_id),
	'tags'         => array()
];

$post_data = $wp_client->posts('update', $updPost);


Видалення посту через апі wp

Передайте масив з ідентифікатором та змініть параметр на 'delete'



$del = $wp_client->posts('delete', array('id'=>46));



Перелік доступних функцій класу для взаємодії з вордпресом



$category_id = 46;
$wp_client->getCategory($category_id);


Отримати категорію по ідентифікатору.



$wp_client->categories();


Отримати список категорій.



$categories = $wp_client->categories('', array('per_page' => 100, 'page' => 1));


Отримати список категорій з лімітом та сторінкою.



$arr = [
    'description' => '',
	'name'        => $name,
	'slug'        => $page_url,
	'link'        => $page_url,
	'parent'      => 0,
];
$wp_client->categories('add', $arr);


Створити категорію. Перелік доступних параметрів



$arr = [
    'id'          => 46,
    'description' => '',
	'name'        => $name,
	'slug'        => $page_url,
	'link'        => $page_url,
	'parent'      => 0,
];
$wp_client->categories('update', $arr);


Оновити категорію.



$wp_client->categories('delete', array('id'=>46));


Видалили категорію.



$page_id = 46;
$page = $wp_client->getPage($page_id);


Отримати сторінку за ідентифікатором.



$pages = $wp_client->pages();


Отримати список сторінок.



	$addPage = [
		'slug'   => $page_slug, 
		'status' => 'publish',
		'title'  => $name, 
		'content' => $content,
		'author'  => 1,
		'comment_status' => 'closed',
		'ping_status'    => 'open'
	];
	
	$result = $wp_client->pages('add', $addPage);


Створити сторінку.



	$uPage = [
		'id'     => 46, 
		'slug'   => $page_slug, 
		'status' => 'publish',
		'title'  => $name, 
		'content' => $content,
		'author'  => 1,
		'comment_status' => 'closed',
		'ping_status'    => 'open'
	];
	
	$result = $wp_client->pages('update', $uPage);


Оновити сторінку.



$result = $wp_client->pages('delete', array('id' => 46));


Видалити сторінку за ідентифікатором.



$user_id = 2;
$u = $wp_client->getUser($user_id);


Отримати дані юзера за ідентифікатором.



$users = $wp_client->users();


Отримати список юзерів.



$newUsers = $wp_client->users('add', array(
			'username' => $author_name,
			'name'     => $author_name,
			'nickname' => $author_name,
			'slug'     => $url,
			'email'    => 'user@email.cp',
			'password' => 'password'
		));


Створити юзера.



$upd = $wp_client->users('update', array(
			'id'       => 2,
			'username' => $author_name,
			'name'     => $author_name,
			'nickname' => $author_name,
			'slug'     => $url,
			'email'    => 'user@email.cp',
			'password' => 'password'
		));


Оновити юзера.



$d = $wp_client->users('delete', array('id'=>2));


Видалити юзера по id.



$tag_id = 46;
$tag = $wp_client->getTag($tag_id);


Отримати тег по id



$tags = $wp_client->tags();
$tags = $wp_client->tags('', array('per_page'=>100, 'page'=>1)); // with param


Отримати список тегів.



$newTag = $wp_client->tags('add', array(
		'name' => $tag_name,
		'slug' => $url,
));


Створити тег



$uTag = $wp_client->tags('update', array(
		'id'  => 46,
		'name' => $tag_name,
		'slug' => $url,
));


Оновити тег.



$dTag = $wp_client->tags('delete', array('id'  => 46));


Видалити тег.



$comments = $wp_client->comments();


Отримати список коментарів.



$addReview = [
	'author_name' => $author,
	'content' => $text,
	'date' => $date_added,
	'post' => $post_id,
	'author_email' => 'email@user.co',
	'status' => 'approve'
];
			
$comment = $wp_client->comments('add', $addReview);


Створити коментар.



$updateReview = [
	'id' => 46,
	'author_name' => $author,
	'content' => $text,
	'date' => $date_added,
	'post' => $post_id,
	'author_email' => 'email@user.co',
	'status' => 'approve'
];
			
$comment = $wp_client->comments('update', $updateReview);


Оновити коментар.



$d = $wp_client->comments('delete', array('id'=>46));


Видалити коментар.



$media = $wp_client->getMedia(); // all media
$media = $wp_client->getMedia($media_id); // with id


Отримати медіа (зображення).



$path = __DIR__.'/example.png';
$upload = $wp_client->uploadMedia($path);


Завантаження медіа.

Зверніть увагу:

Доступні параметри до вказаних методів перечислені на сайті офіційної документації за посиланням

Даний скрипт поставляється як є без комерційної складової. Ви можете доробити/переробити абсолютно все. Якщо у вас є побажання - пишіть на пошту, можливо виконаю оновлення.

Важливий момент по безпеці. Використовуйте обробник, в якому доступ до апі тільки з додатковою HTTP авторизацією або по ключу в іншому випадку можете зловити вірус чи ще щось...

Посилання на git: https://github.com/AndrewAlexandrovich/wp_api_php_class

Бажаєте дізнатись скількі коштує Ваш проєкт?

Заповніть заявку

Категорії

Те, що читають:

Name post

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco

Name post

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco