Добавить категории через Wordpress API
Wednesday, March 10th, 2010 |Класс описанный в статье “Постинг в Wordpress” позволяет прикрепить к посту уже созданные категории, что как бы несколько неудобно если их нужно создавать динамически. Это можно сделать через Wordpress API (по XML-RPC), но в библиотеке эта функция не реализованна, впрочем как и многие другие. Пришлось написать самому :
import xmlrpclib
def uniq(input):
output = []
for x in input:
if x not in output:
output.append(x)
return output
def getCategories(blog_url, blog_user, blog_pwd):
_server = xmlrpclib.ServerProxy(blog_url)
cat = _server.wp.getCategories(1, blog_user, blog_pwd)
categories = []
for item in cat:
categories.append(item['categoryName'].replace("&", "&"))
return categories
def addCategories(blog_url, blog_user, blog_pwd, categories):
_server = xmlrpclib.ServerProxy(blog_url)
categories = uniq(categories)
created_cat = getCategories(blog_url, blog_user, blog_pwd)
for item in categories:
itm = item.replace("&", "&")
if (itm not in created_cat):
post_name = itm
post_slug = itm.replace(" ", "-")
post_slug = post_slug.replace("&", "")
post_parent_id = 0
post_description = itm
catStructure = {'name' : post_name,
'slug' : post_slug,
'parent_id' : post_parent_id,
'description' : post_description}
category_id = _server.wp.newCategory(1, blog_user, blog_pwd, catStructure)
Подобный образом можно реализовать вызов практически любого документированного метода. btw разработчики вордпресса сильно отстают с документацией, поэтому проще посмореть исходный код файла xml-rpc.php в последней сборке вордпресса, чтобы быть в курсе. Я так понимаю, используя вордпрессовскую реализацию metaWeblog API (metaWeblog.newPost) можно добавлять еще и тэги к посту, но саму функцию вроде addTags я не нашел, к сожалению.
Вот так это выглядит на практике :
wp_cat.addCategories(category)
cats_id = []
for item in category:
if (wp.getCategoryIdFromName(item) <> None):
cats_id.append(wp.getCategoryIdFromName(item))
post.categories = tuple(uniq(cats_id))
idPost = wp.newPost(post, True)
Где wp – это экземпляр класса wordpresslib, а category – это список категрий в виде списка – ['look', 'here']. Типа того, вообщем разобраться несложно.