Я думаю, многие блоггеры пользуются возможностью отложенной публикации постов в WP. Действительно, функция очень удобная, т.к. позволяет публиковать новые материалы через более-менее равномерные промежутки времени. К тому же для ее использования делать практически ничего не нужно, достаточно просто указать в админке WordPress дату публикации.
Но недавно у меня возникла задача публиковать посты через XML-RPC и, сразу же обнаружилось несколько не совсем очевидных нюансов, которые касаются указания даты. О них я и хочу сегодня рассказать.
Для начала немного теории.
WordPress имеет встроенный XML-RPC сервер, который позволяет выполнять практически все операции с постами и страницами (создание/чтение/изменение/удаление).
Примечание. По-умолчанию в целях безопасности поддержка XML-RPC отключена. Вы можете включить ее на странице Settings
— Writing
— Enable 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 интерфейс позволяет делать очень интересные вещи. Например, можно сделать общую панель управления несколькими блогами или систему для получения расширенной статистики (частота публикаций, среднее количество комментариев и т.п.).
Возможности ограничены только вашей фантазией 🙂