本文最后更新于 2024年10月23日,已超过 4 月没有更新,如果文章内容失效,请反馈给我们,谢谢!
看了一下Wordpress远程发布文章的方式,基本围绕着 XML-RPC 。
但是这功能并不安全,很多爬虫都会扫描 /xmlrpc.php
路径url,导致许多主题和优化插件都自动禁用该功能了,甚至有的防火墙也建议添加到 URL 黑名单。
没办法只能手写暴露一个发布接口了
安装一个 WPCode 插件加入以下PHP代码,或者干脆放入function.php文件中
<?php
// rest初始化
add_action('rest_api_init', function () {
// 注册API接口,地址参考:https://www.krjojo.com/wp-json/api/publish
register_rest_route('api', 'publish', [
// 接收post提交
'methods' => 'POST',
'callback' => function ($request) {
// 验证Token密码,可以自行修改
if ((getallheaders()['Token'] ?? '') !== 'VH6AudNa%8Z*TYSg') return;
// 获取json参数并发布文章
$jsonData = file_get_contents("php://input");
$post_id = wp_insert_post(json_decode($jsonData, true));
// 返回发布成功或失败
if (is_wp_error($post_id)) {
return [
'code' => 400,
'id' => 0,
'msg' => $post_id->get_error_message(),
];
} else {
return [
'code' => 200,
'id' => $post_id,
'msg' => 'ok',
];
}
},
'permission_callback' => function () {
return true;
}
], 1);
});
上面的 api 地址和 Token 可以自行修改
由于使用官方的 wp_insert_post()
函数进行发布,所以会正常触发系统依赖,meta数据也会进行判断并更新写入,包括像点赞浏览量等。
也因为使用了json提交数据,可操作的内容也非常的大,甚至可以修改已有文章,详细可以看 wp_insert_post
的官方文档:
https://developer.wordpress.org/reference/functions/wp_insert_post/
下面分享一下 python 的发布文章的写法
import requests
url = 'https://www.krjojo.com/wp-json/api/publish'
headers = {
'Token': 'VH6AudNa%8Z*TYSg', # 上面的Token
'Content-Type': 'application/json' # json格式数据
}
data = {
'post_author': 1, # 作者id,一般是站长
'post_date': "2024-10-08 20:40:34", # 发布时间
'post_content': "这是内容",
'post_title': "这是标题",
"post_status": "publish", # publish代表已发布,默认为 draft 草稿
"post_category": [20, 8537], # 分类id
"tags_input": ["标签","测试"] # 可以多个标签,自动识别同名
}
# 发送POST请求
response = requests.post(url, json=data, headers=headers)
# 检查响应状态码
if response.status_code == 200:
if response.json()['code'] == 200:
print('发布成功,文章id:', response.json()['id'])
else :
print('发布失败:', response.json()['msg'])
exit()
else:
print('请求失败,状态码:', response.status_code)
exit()
由于分类比较特殊,可以存在同名,并且有上下级关系,所以只能手动填写分类id。
如果是批量发布,只需要封装到for循环即可。
看看效果图,轻松导入5W文章

© 版权声明
分享是一种美德,转载请保留原链接
THE END