Отложенная публикация постов в WordPress с помощью XML-RPC

Владимир | | PHP, Web разработка, WordPress.

Я думаю, многие блоггеры пользуются возможностью отложенной публикации постов в WP. Действительно, функция очень удобная, т.к. позволяет публиковать новые материалы через более-менее равномерные промежутки времени. К тому же для ее использования делать практически ничего не нужно, достаточно просто указать в админке WordPress дату публикации.

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

Для начала немного теории.

WordPress имеет встроенный XML-RPC сервер, который позволяет выполнять практически все операции с постами и страницами (создание/чтение/изменение/удаление).

Примечание. По-умолчанию в целях безопасности поддержка XML-RPC отключена. Вы можете включить ее на странице SettingsWritingEnable the WordPress, Movable Type, MetaWeblog and Blogger XML-RPC publishing protocols.

Для публикации поста нужно сформировать и отправить XML-RPC запрос со всеми необходимыми данными.

Естественно, формировать его вручную не самое увлекательное занятие. Гораздо удобнее использовать одну из многочисленных библиотек для работы с XML-RPC.

Для этого примера я решил использовать библиотеку под названием IXR_Library, которую, кстати, использует и движок WordPress.

Только WP ее использует для создания XML-RPC сервера, а нам нужен XML-RPC клиент.

Нам потребуется выполнить 3 несложных действия.

1) Создать объект типа IXR_Client (XML-RPC клиент).

2) Создать массив с данными.

3) Опубликовать пост с помощью метода query.

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

Взгляните на пример кода.

include('IXR_Library.inc');

$client = new IXR_Client('http://myblog.com/xmlrpc.php');

$requestData = array(
	0,
	$userName,
	$userPass,
	array(
		'title'=>'Заголовок поста',
		'mt_allow_comments'=>1,
		'mt_allow_pings'=>0,
		'mt_keywords'=>'tag1, tag2',
		'dateCreated'=>new IXR_Date('20091021T12:23:10'),
		'description'=>'Тут нужно вставить текст поста ...'
	),
	TRUE
);

$resp = $client->query('metaWeblog.newPost', $requestData);
$postId = $client->getResponse();

Мы подключили библиотеку, создали объект типа IXR_Client (при этом мы указали адрес блога) и начали заполнять массив с данными ($requestData).

Первым элементом этого массива должен быть id автора. Если вы единственный автор блога, ставьте 0.

Второй и третий элементы – ваши логин и пароль.

Четвертый элемент — массив с данными. Это ассоциативный массив, поэтому последовательность элементов роли не играет. В данном случае мы указали заголовок поста (title), разрешили комментарии (mt_allow_comments) и запретили пинги (mt_allow_pings).

Обратите внимание. Элементам mt_allow_comments и mt_allow_pings нужно присвоить числовые значения, элементу title – текстовое.

Затем мы указали перечень тегов (mt_keywords) и добавили текст поста (description).

Теперь о дате. Передавать нужно объект типа IXR_Date, а в его конструкторе указать дату в формате «ггггммддТчч:мм:сс». Букву «Т» в принципе можно заменить любой другой или пробелом, она просто игнорируется. Но все остальные значения должны быть введены в строгом соответствии с этим форматом, а длина строки должна равняться 17-ти символам.

Например, нельзя выводить только две последних цифры года, обязательно все четыре.

Пятый элемент массива – булево значение, указывает, публиковать пост или нет. Если дата, указанная в элементе dateCreated еще не наступила, то статус поста будет scheduled.

Для отправки поста мы используем метод query. В его первом параметре указываем название функции XML-RPC сервера, которую мы хотим вызвать. В данном случае это metaWeblog.newPost. Во втором – передаем массив с данными.

Примечание. Подробнее о функциях, которые поддерживает XML-RPC сервер WP можно почитать в статье «Публикация постов в WordPress с помощью XML-RPC и CodeIgniter». Но основными источниками информации остаются Codex WP и, конечно, сам файл xmlrpc.php.

Получить id опубликованного поста можно с помощью метода getResponse.

Как видите, ничего принципиально сложного нет. Главное правильно сформировать массив с данными 😉

А вообще XML-RPC интерфейс позволяет делать очень интересные вещи. Например, можно сделать общую панель управления несколькими блогами или систему для получения расширенной статистики (частота публикаций, среднее количество комментариев и т.п.).

Возможности ограничены только вашей фантазией 🙂