我觉得这应该是其他几个人已经完成的事情......编写一个脚本,使用 Wordpress Rest API 从开发网页中删除所有示例数据。 现在,我尝试自动发布图像和帖子,这很有效,并导致数百个帖子和图像炸毁了我的数据库。 正在寻找执行此操作的脚本,ChatGPT 和 Google 搜索引擎都没有提供任何好的答案。
有什么想法可以在哪里寻找这样的脚本或者如何自己编写它吗?
我希望这可以帮助其他人!
import requests
import base64
def generate_auth_header():
"""Generate the authentication header for the Wordpress API."""
try:
user = "admin" # Set your username here
password = "iTef fMhJ Rcij Azj3 Uban TeST" # Set your Appllication password here
credentials = user + ":" + password
token = base64.b64encode(credentials.encode())
header = {"Authorization": "Basic " + token.decode("utf-8")}
return header
except IOError as e:
raise IOError(f"Error connecting to Wordpress backend: {e}") from e
# Create header and wordpress URL
wordpress_url = "localhost:10014" # Set your domain here
header = generate_auth_header()
注意:如果您尚未设置应用程序密码,请阅读此
# Function to get all posts
def get_all_posts():
posts_url = f'{wordpress_url}posts?per_page=100'
response = requests.get(posts_url, headers=header, timeout=5)
return response.json()
# Function to delete a post by ID
def delete_post(post_id):
delete_url = f'{wordpress_url}posts/{post_id}'
response = requests.delete(delete_url, headers=header, timeout=5)
return response.status_code
# Get first 100 posts
posts = get_all_posts()
print(f"posts: {posts}")
# Delete all posts iterating over 100 posts at a time
while posts != []:
for post in posts:
post_id = post['id']
delete_status = delete_post(post_id)
if delete_status in [200, 201]:
print(f"Post {post_id} deleted successfully.")
else:
print(f"Failed to delete post {post_id}, status code: {delete_status}")
posts = get_all_posts()
注意: GET-posts URL 中的查询字符串
?per_page=100
使事情变得更容易,而不是一次迭代默认的 10 个帖子。
# Function to get all images
def get_all_media():
media_url = f'{wordpress_url}media?per_page=100'
response = requests.get(media_url, headers=header, timeout=5)
return response.json()
# Function to delete each image by ID
def delete_media(media_id):
delete_url = f'{wordpress_url}media/{media_id}?force=1'
response = requests.delete(delete_url, headers=header, timeout=5)
return response.status_code
# Get and delete all media (images)
media = get_all_media()
print(f"media: {media}")
# Delete all media (images) iterating over 100 images at a time
while media != []:
for media_item in media:
media_id = media_item['id']
delete_status = delete_media(media_id)
if delete_status in [200, 201]:
print(f"Media {media_id} deleted successfully.")
else:
print(f"Failed to delete media {media_id}, status code: {delete_status}")
media = get_all_media()
注意:没有查询字符串
?force=1
删除图像对我来说不起作用。