16.11.2009 01:38Публикация поста в WordPress с помощью XMLRPC с поддержкой All in One SEO Pack
Часто при создании блогов и сплогов встает задача их автоматического наполнения тем или иным контентом.
Я написал небольшую функцию автоматической публикации поста в блоге WordPress с использованием механизма XML-RPC. Вообще говоря, функций этих написано уже много, в чем легко можно убедиться погуглив эту тему, но всё же, фукнции, которая поддерживала бы передачу тегов keywords и description для плаггина «All in One SEO Pack» я не нашёл, поэтому пришлось разбираться самому. Ну и вот, что у меня получилось:
{code type=php}
function wpPostXMLRPC($title,$body,$rpcurl,$username,$password,$category
=array(),$tags=»,$keywords, $decription, $aiosptitle, $encoding=»UTF-8″)
{
//Get categories
$cats=array();
$params=array(0,$username,$password);
$request = xmlrpc_encode_request(‘metaWeblog.getCategories’,$params);
$ch = curl_init();
curl_setopt($ch, CURLOPT_POSTFIELDS, $request);
curl_setopt($ch, CURLOPT_URL, $rpcurl);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec($ch);
curl_close($ch);
preg_match_all(‘/\
(\w+)\<\/string\>\<\/value\>\<\/member\>/’, $result, $matches,
PREG_SET_ORDER);
for ($i=0;$i
array_push($cats,$matches[$i][1]);
}
//Find nonexistent categories
$diff=array_diff($category,$cats);
//Create nonexistent categories
if (!empty($diff) && strlen($diff[0]))
{
foreach ($diff as $cat)
{
$newcat=array('name' => $cat, 'slug' => strtolower($cat),
'description' =$cat.");
$params=array(0,$username,$password,$newcat);
$request = xmlrpc_encode_request('wp.newCategory',$params);
$ch = curl_init();
curl_setopt($ch, CURLOPT_POSTFIELDS, $request);
curl_setopt($ch, CURLOPT_URL, $rpcurl);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 0);
curl_exec($ch);
curl_close($ch);
}
}
$title = htmlentities($title,ENT_NOQUOTES,$encoding);
$tags = htmlentities($tags,ENT_NOQUOTES,$encoding);
$content = array(
'title'=>$title,
'description'=>$body,
'mt_allow_comments'=>1, // 1 to allow comments
'mt_allow_pings'=>1, // 1 to allow trackbacks
'post_type'=>'post',
'mt_keywords'=>$tags,
'categories'=>$category,
'custom_fields' => array(
array( 'key' => '_aioseop_description', 'value' => $decription ),
array( 'key' => '_aioseop_keywords', 'value' => $keywords ),
array( 'key' => '_aioseop_title', 'value' => $aiosptitle )
),
);
$params = array(0,$username,$password,$content,true);
$request = xmlrpc_encode_request('metaWeblog.newPost',$params);
$ch = curl_init();
curl_setopt($ch, CURLOPT_POSTFIELDS, $request);
curl_setopt($ch, CURLOPT_URL, $rpcurl);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$results = curl_exec($ch);
curl_close($ch);
return $results;
}
{/code}
Функцию нужно вызывать со следующими параметрами:
- $title – название записи;
- $body – тело поста;
- $rpcurl – xmlrpc.php URL;
- $username – имя пользователя (пользователь должен обладать правом публикации постов);
- $password – пароль пользователя;
- $category – массив с категориями записи;
- $tags – теги для записи (разделенные запятой);
- $keywords – ключевые слова (должен быть установлен плаггин «All In One SEO Pack»);
- $decription – описание (должен быть установлен плаггин «All In One SEO Pack»);
- $aiosptitle – заголовок записи (должен быть установлен плаггин «All In One SEO Pack»);
- $encoding – кодировка (по умолчанию UTF-8);
В случае если тегов и категорий не существует они будут созданы автоматически.
Похожие записи:
Комментариев нет | Теги: php, WordPress, Программирование