Как стать автором
Обновить

Пользовательские функции для постинга в Wordpress через XML-RPC

Как известно, существует достаточно удобный метод удаленного (и автоматического) создания постов в блоге на Worpress. Для этого в движке существует специальный класс wp_xmlrpc_server, описание которого находится в файле xmlrpc.php, расположенном в корне сайта. Этот класс является расширением базового класса библиотеки Incutio XML-RPC library, которая входит по умолчанию в поставку Worpress (wp-includes\class-IXR.php). Методы wp_xmlrpc_server позволяют получать информацию, создавать и редактировать категории, теги, посты, приложения и т.д. Однако что, если этого API недостаточно для решения специальных задач?

Создание дополнительных методов для удаленного постинга


Например, однажды мне потребовалось при создании поста автоматически закреплять за ним изображение-миниатюру. Но стандартный метод metaWeblog.newPost не позволяет этого делать.
Решение заключается в использовании фильтра 'xmlrpc_methods', с помощью которого можно добавлять или заменять стандартные методы работы через XML-RPC. Следующий код необходимо добавить в файл function.php:
add_filter('xmlrpc_methods', 'custom_xmlrpc_methods');
function custom_xmlrpc_methods($methods)
{
$methods = array (
'name_metod_1' => 'my_function_1',
'name_metod_2' => 'my_function_2',
);
return $methods;
}

После этого дальше можем описать новые функции:
function my_function_1 ($args) {
global $wpdb, $wp_xmlrpc_server; /* Это позволяет обращаться к стандартным объектам базы данных Worpdpress и XML-RPC-сервера*/
...
return $result;
}

Так решение вопроса о закреплении миниатюры к посту нашлось через функцию update_post_meta, вставленную в мой собственный метод createPost:
update_post_meta($post_ID, '_thumbnail_id', $image_ID);

Создание XML-RPC-клиента


Клиент также несложно создается с помощью библиотеки IXR.
<?php
//подключаем библиотеку
include_once 'IXR_Library.php';

//логин и пароль
$rpc_url = 'http://www.site.ru/xmlrpc.php';
$rpc = new IXR_Client( $rpc_url );

//Раскоментировать для дебага
//$rpc->debug = true;

// Выполняем запрос. В аргументах метода query вначале название XML-RPC-метода, затем - его аргументы.
if (!$rpc->query(
'createPost',
$blog_id,
$username,
$password,
$struct,
$public)){
die('Something went wrong - '.$rpc->getErrorCode().' : '.$rpc->getErrorMessage());
}

// Получаем ответ.
$answer=$rpc->getResponse();

Таким образом, можно удаленно и автоматически создавать и редактировать посты с тем же функционалом, что и через админ-панель Wordpress, а также написать собственный блог-клиент.

Ссылки


1. Custom XML-RPC Methods in WordPress
2. The Incutio XML-RPC Library for PHP
3. WordPress XML-RPC support
Теги:
Хабы:
Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.