Автоматизация постинга в Wordpress с помощью XML RPC
Размещено 2009-07-06
в разделе Программирование | Метки:
XML RPC, Zend Framework
Кроме тех постов что добавлялись автоматически, до этого посты вбивались руками, поэтому я этим запросом убил только те что были добавлены автоматически.
С категориями пришлось подумать, дело в том что для увеличения количества страниц второго уровня, необходимого для повышения доходности сайта в sape я создавал достаточно много разделов. После удаления всех постов в категориях у меня все равно показывалось количество (теперь уже не существующих записей).
Обнулить количество постов можно таким запросом
Когда количество блогов превышает 10 штук, а количество контента больше 150 тысяч постов, то возникает вопрос как бы все это запостить с помощью различных программ :)
Написал небольшой класс для постинга в Wordpress с помощью XMLRPC
<?php
class CmsWordpress
{
public $blog_url;
private $blog_username;
private $blog_password;
private $blog_id;
private $client;
public function setParams($params)
{
$this->blog_url = $params['url'];
$this->blog_username = $params['username'];
$this->blog_password = $params['password'];
$this->client = new Zend_XmlRpc_Client('http://' . $this->blog_url . '/xmlrpc.php');
$this->client->getHttpClient()->setConfig(
array(
'timeout' => 300
)
);
return $this->setBlogID();
}
private function setBlogID()
{
try {
$result = $this->client->call('wp.getUsersBlogs', array('username' => $this->blog_username,
'password' => $this->blog_password));
} catch (Zend_XmlRpc_Client_FaultException $e) {
var_dump($e);
}
if (count($result)) {
$this->blog_id = $result[0]['blogid'];
return true;
}
return false;
}
public function getCategories()
{
$result = $this->client->call('wp.getCategories', array('blog_id' => $this->blog_id,
'username' => $this->blog_username,
'password' => $this->blog_password));
return $result;
}
public function createCategory($name)
{
$result = $this->client->call('wp.newCategory', array('blog_id' => $this->blog_id,
'username' => $this->blog_username,
'password' => $this->blog_password,
'struct' => array('name' => $name)
)
);
return $result;
}
public function getPage($id)
{
$result = $this->client->call('wp.getPage', array('blog_id' => $this->blog_id,
'page_id' => $id,
'username' => $this->blog_username,
'password' => $this->blog_password,
'struct' => array('name' => $name)
)
);
return $result;
}
public function addPost($title, $description, $more, $keywords, $categories)
{
$post_data = array('blog_id' => $this->blog_id,
'username' => $this->blog_username,
'password' => $this->blog_password,
'content' => array('title' => $title,
'description' => $description,
'mt_text_more' => $more,
'mt_allow_comments' => 0,
'mt_allow_pings' => 0,
'mt_keywords' => $keywords,
'categories' => $categories,
),
// 'datetime' => '2009-07-02 15:05',),
'publish' => 1,
);
$result = $this->client->call('metaWeblog.newPost', $post_data);
return $result;
}
}
?>
Класс не до конца еще написан, но добавлять новые посты, при этом создавая категории и теги уже можно. Вот этот параметр менять не советую, так как были случаи когда блог заполнялся, начал тупить хостинг в итоге вместо 900+ постов добавилось 200 с чем то.
<?php
$this->client->getHttpClient()->setConfig(
array(
'timeout' => 300
)
);
?>Посты удалить было достаточно просто одним запросом
DELETE FROM wp_posts WHERE id > 254
Кроме тех постов что добавлялись автоматически, до этого посты вбивались руками, поэтому я этим запросом убил только те что были добавлены автоматически.
С категориями пришлось подумать, дело в том что для увеличения количества страниц второго уровня, необходимого для повышения доходности сайта в sape я создавал достаточно много разделов. После удаления всех постов в категориях у меня все равно показывалось количество (теперь уже не существующих записей).
Обнулить количество постов можно таким запросом
UPDATE wp_term_taxonomy SET COUNT = 0 WHERE term_taxonomy_id IN (SELECT term_taxonomy_id FROM `wp_term_relationships` WHERE object_id > 254)
ps: прежде чем юзать запросы, сделайте бэкап ;-)
Комментарии