Я думаю, многих из Вас интересует как можно добавлять посты на WordPress, и при этом не заходить на сам блог. Это реально, используя XML-RPC API для программного добавления статей.
Для этой цели используем фреймверк CodeIgniter, в комплект которого входит библиотека XML-RPC, с ее помощью Вы будете делать запросы к WordPress. Скрипт xmlrpc.php отвечает за вызов процедур в WordPress, мы будем использовать MetaWeblog API в своих целях. Метод добавления статьи XML запросом в Ваш WordPress блог выглядет примерно так:
<?php
class Poster extends Controller {
function Poster(){
parent::Controller();
}
function index(){
$pageData['title'] = "Отправка постов в WordPress";
$this->load->view('postform', $pageData);
}
function sendpost() {
$this->load->library('xmlrpc');
$pageData['title'] = "Отправка постов в WordPress";
$blogUrl = $this->input->post('blogurl');
$postTitle = $this->input->post('posttitle');
$postTags = $this->input->post('posttags');
$postText = $this->input->post('posttext');
if (!$blogUrl || !$postTitle || !$postTags || !$postText) {
$pageData['mes'] = 'Нужно заполнить форму';
}
else {
$this->xmlrpc->server($blogUrl.'/xmlrpc.php', 80);
$this->xmlrpc->method('metaWeblog.newPost');
$request = array(
array(0, 'int'), //blog id
array('admin', 'string'), //username
array('your_pass', 'string'), //password
array(array('title'=>array($postTitle, 'string'),
'description'=>array($postText, 'string'),
'mt_keywords'=>array(split(',\s*', $postTags), 'array'),
'mt_allow_comments'=>array(1, 'int'),
'mt_allow_pings'=>array(0, 'int')),'struct'), //content
array(TRUE, 'boolean') //publish
);
$this->xmlrpc->request($request);
// $this->xmlrpc->set_debug(TRUE);
if ( ($res = $this->xmlrpc->send_request()) === FALSE) {
$pageData['mes'] = $this->xmlrpc->display_error();
}
else {
$pageData['mes'] = 'Пост опубликован';
}
}
$this->load->view('postform', $pageData);
}
}
?>
А вывод будет производится с помощью формы для заполнения:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" dir="ltr" lang="ru-RU">
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<title><?php echo $title; ?></title>
</head>
<body>
<?php
if (isset($mes)) {
echo '<p>'.$mes.'</p>';
}
?>
<form method="post" action="<?php echo site_url("poster/sendpost"); ?>">
<p>
<label for="blogurl">URL блога</label>
<input name="blogurl" id="blogurl" type="text" size="20" />
(c http:// и без слеша в конце)
</p>
<p>
<label for="posttitle">Заголовок поста</label>
<input name="posttitle" id="posttitle" type="text" size="20" />
</p>
<p>
<label for="posttags">Теги</label>
<input name="posttags" id="posttags" type="text" size="20" />
</p>
<p>
<label for="posttext">Тескт поста</label>
<textarea name="posttext" id="posttext" cols="20" rows="5"></textarea>
</p>
<p>
<input type="submit" name="sbmbtn" id="sbmbtn" value="Отправить" />
</p>
</form>
</body>
</html>
Информация по использованию скрипта:
После загрузки библиотеки XML RPC, заполните форму.
Формируете XML-RPC запрос(с указанием категории, темы, описания и самого поста).
После этого сформируется XML – запрос, Ваш пост будет отправлен.
4 комментария к статье
А возможно как то передавать сразу несколько постов?
А с какой целью поисковые системы, в частности Яндекс, индексирует файл xmlrpc.php ??? Может быть его запретить к индексации в robots.txt ???
@Шопоголик, а он в правильном robots.txt и должен быть запрещен.
Disallow: /xmlrpc.php.
У меня в блоге есть пост о robots.txt. Дамаю, будет интересно.
Знаю что при помощи специальных клиентов можно публиковать записи в wordpress при помощи xmlrpc.php, но у меня это не получается, как я тока не крутил)) может надо как то изменять файл xmlrpc.php или особые настройки какие надо сделать, а?