通过XMLRPC创建WordPress文章时如何添加并创建新标签?
解决WordPress XML-RPC创建文章时无法新增标签的问题
我之前也碰到过完全一样的坑!WordPress的XML-RPC接口在wp.newPost方法里,用terms_names关联标签时确实只能识别已存在的标签,没办法自动创建新标签——这是接口的设计限制,得换个思路解决:先通过XML-RPC创建新标签,再把标签ID关联到文章上。
具体步骤和代码示例
首先,写一个辅助函数,用来检查标签是否存在,不存在就创建它:
import xmlrpc.client def get_or_create_tag(server, blog_id, username, password, tag_name): # 先查询是否存在同名标签 existing_tags = server.wp.getTerms( blog_id, username, password, 'post_tag', {'search': tag_name} ) if existing_tags: # 返回已存在标签的ID return existing_tags[0]['term_id'] # 不存在则创建新标签 tag_data = { 'name': tag_name, 'taxonomy': 'post_tag' } return server.wp.newTerm(blog_id, username, password, tag_data)
然后,在创建文章前,先处理你的标签列表,把每个标签都转换成对应的ID(新标签会自动创建),再用terms_ids参数关联到文章:
# 初始化ServerProxy server = xmlrpc.client.ServerProxy(wp_url) # 你的标签列表 tags = ["blah", "random new tag"] # 处理标签,获取所有标签ID tag_ids = [ get_or_create_tag(server, blog_id, wp_username, wp_password, tag) for tag in tags ] # 构建文章数据,用terms_ids关联标签 data = { 'post_title': title, 'post_content': content, 'post_date': date_created, 'post_thumbnail': int(id), 'custom_fields': custom_fields, 'post_status': 'publish', 'terms_ids': {'post_tag': tag_ids} } # 创建文章 post_id = server.wp.newPost(blog_id, wp_username, wp_password, data)
为什么之前的方法不行?
post_tag、mt_keywords、tags这些旧字段要么已被弃用,要么只能关联已存在的标签,不会触发新标签的创建。terms_names参数的设计逻辑是“关联已有术语”,所以即使你传了新标签名,WordPress也会直接忽略,不会自动创建。
额外注意点
- 确保你的WordPress账号拥有创建标签的权限(比如编辑、管理员权限),否则
wp.newTerm会返回权限错误。 - 如果跳过标签存在性检查直接调用
wp.newTerm,当标签已存在时会抛出XML-RPC错误,所以先查询再创建是更稳妥的方式。
内容的提问来源于stack exchange,提问作者disruptive
相关产品推荐
相关产品推荐

