You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Python按ID为WordPress文章添加标签时出现参数错误

错误原因

报错信息 tags[0] is not of type integer 直接点明问题:WordPress REST API 的 tags 参数要求传入整数类型的标签ID列表,但你当前传入的是字符串类型的标签名称列表,参数类型不匹配导致400错误。

解决方法

WordPress API 不支持直接通过标签名称关联文章,必须先获取标签对应的ID(若标签不存在则创建新标签),再用ID列表更新文章。

1. 实现标签ID的获取/创建逻辑

先写一个工具函数,负责查询标签是否存在:存在则返回ID,不存在则创建新标签并返回ID:

def get_or_create_tag(tag_name, site_url, headers):
    # 查询标签是否存在
    tag_search_url = f"{site_url}/wp-json/wp/v2/tags?search={tag_name}"
    response = requests.get(tag_search_url, headers=headers)
    if response.status_code == 200 and len(response.json()) > 0:
        return response.json()[0]['id']
    # 不存在则创建新标签
    create_tag_url = f"{site_url}/wp-json/wp/v2/tags"
    payload = {"name": tag_name}
    create_response = requests.post(create_tag_url, headers=headers, json=payload)
    if create_response.status_code == 201:
        return create_response.json()['id']
    raise Exception(f"Failed to handle tag {tag_name}: {create_response.text}")

2. 修改原代码更新文章标签

替换原代码中标签处理的部分,先批量获取所有标签ID,再用 PUT 请求(注意:更新文章必须用PUT,原代码的POST是创建新文章的请求)更新文章:

import requests

site_url = "https://set-services.shop"
api_key = "T70A Bb2B HyF9 xS4L tzka R782"
headers = {"Authorization": "Basic " + api_key}

POST_ID = 540
tag_names = ["tag1", "tag2", "tag3"]

# 批量获取/创建标签ID
tag_ids = []
for name in tag_names:
    try:
        tag_id = get_or_create_tag(name, site_url, headers)
        tag_ids.append(tag_id)
    except Exception as e:
        print(f"Error with tag {name}: {str(e)}")
        exit(1)

# 更新文章标签
endpoint = f"{site_url}/wp-json/wp/v2/posts/{POST_ID}"
payload = {"tags": tag_ids}
# 用PUT请求执行更新操作
response = requests.put(endpoint, headers=headers, json=payload)

if response.status_code in [200, 201]:
    print(f"Successfully added tags to post {POST_ID}")
else:
    print(f"Error adding tags to post {POST_ID}: {response.text}")

# 定义标签处理函数
def get_or_create_tag(tag_name, site_url, headers):
    tag_search_url = f"{site_url}/wp-json/wp/v2/tags?search={tag_name}"
    response = requests.get(tag_search_url, headers=headers)
    if response.status_code == 200 and len(response.json()) > 0:
        return response.json()[0]['id']
    create_tag_url = f"{site_url}/wp-json/wp/v2/tags"
    payload = {"name": tag_name}
    create_response = requests.post(create_tag_url, headers=headers, json=payload)
    if create_response.status_code == 201:
        return create_response.json()['id']
    raise Exception(f"Failed to handle tag {tag_name}: {create_response.text}")

关键注意事项

  • 请求方法错误:原代码用 POST 请求更新文章是错误的,WordPress REST API 中,更新已有资源需要用 PUT 请求,POST 仅用于创建新资源。
  • 权限验证:确保你的API密钥拥有编辑文章、管理标签的权限,否则会返回权限错误。

内容的提问来源于stack exchange,提问作者ELOUTMADI

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 22:25:18