Пишу скорее для себя, чтоб не забывать :)

Вообщем-то подобных постов (про автопостинг в WP) в инете достаточно много, но у меня почему-то ни одна из step-by-step инструкций сходу не заработала. Ну, кроме одной :) Правда, напильник всё-же понадобился.

А задача была такая: в некой таблице БД забиты строки — текст, заголовок, рубрика, ключевые слова. Нужно всё это импортнуть в WP с периодичностью публикаций раз в три дня.

Есть замечательный класс (клиент) для работы с xml-rpc — ixr library. Я честно пытался поковыряться в нём, но потом нашёл оснастку к нему, где всё было легко и просто, поэтому я забил на очередное изобретение велосипеда.

Вот сама оснастка: http://www.charnad.com/wp-poster/.

А вот и сам скрипт постинга:

require ("sql_drv.php"); //класс работы с БД
require ('xmlrpc/ixr_client.php'); // библиотека работы с XMLRPC
require ('xmlrpc/wp_poster.php'); // оснастка для ixr client

//данные авторизации на блог
$blog_login = 'root';
$blog_pass = 'password';
$blog_xmlrpc = 'http://my-wordpress-blog.ru/xmlrpc.php';

//инициализация процесса :)
$poster = wp_poster::getInstance();
$blog = new wp_blog($blog_xmlrpc, $blog_login, $blog_pass, 0);

//запоминаем текущее время в формате timestamp
$time = time();

$r = $DB->query('select * from texts'); //тащим всё, что в таблице
while ($text = $DB->fetch_row($r)) {  // для каждой вытащенной записи
	$blog->wp_createCategories(array($text['category'])); //создаём новую категорию в блоге (даже если она уже есть, ничё страшного)
	$post = new wp_post(); //новый пост
	$post->setTitle(iconv('cp1251', 'UTF-8', $text['title'])); //задаём заголовок в UTF8-кодировке
	$post->setDescription(iconv('cp1251', 'UTF-8', $text['descr'])); //задаём контент в UTF8
	$post->setPostStatus('publish');//статус поста
	$post->setPostType('post');//тип поста 
	$post->setDate($time); //время публикации поста
	$post->setCategories(array($text['category'])); //указываем категорию поста
	$post->setKeywords(array(explode (', ', $text['keywords']))); // если в БД тэги хранятся через запятую, переделываем в массив и указываем его
	$res = $poster->post($blog, $post); //отправляем все данные блогу
	echo $res[0]."<br> опубликован"; //можно посмотреть результат
	$time = $time + (3600*72) + rand(-21600,21600); //смещаем метку времени на трое суток плюс-минус шесть часов (для более правдивого вида).
	sleep(1); //таймаут между постингом 1 секунда - на всякий случай :)
}

Вот так можно создавать блоги на год вперёд :)