MENU

WordPress REST APIですべての記事を削除するPythonコード

実行するとすべての記事が削除されますので、注意してください。

目次

コード

import os
import requests
from requests.auth import HTTPBasicAuth

# WordPressの設定
WORDPRESS_URL = "https://example.com/wp-json/wp/v2/posts"
USERNAME = os.environ["WORDPRESS_USERNAME"]
APP_PASSWORD = os.environ["WORDPRESS_APP_PASSWORD"]

def fetch_posts(base_url, auth, per_page=100):
    """
    すべての投稿を取得する
    """
    posts = []
    page = 1

    while True:
        url = f"{base_url}?per_page={per_page}&page={page}"
        response = requests.get(url, auth=auth)

        if response.status_code != 200:
            print(f"Error fetching posts (page {page}): {response.status_code}")
            break

        data = response.json()
        posts.extend(data)

        if len(data) < per_page:  # 最後のページに到達
            break

        page += 1

    return posts

def delete_post(base_url, auth, post_id):
    """
    指定された投稿を削除する
    """
    url = f"{base_url}/{post_id}"
    response = requests.delete(url, auth=auth)

    if response.status_code == 200:
        print(f"投稿 (ID: {post_id}) を削除しました。")
    else:
        print(f"投稿 (ID: {post_id}) の削除に失敗しました:", response.text)

def delete_all_posts(base_url, auth):
    """
    すべての投稿を削除する
    """
    posts = fetch_posts(base_url, auth)

    if not posts:
        print("削除する投稿はありません。")
        return

    for post in posts:
        delete_post(base_url, auth, post['id'])

if __name__ == "__main__":
    # 認証情報の設定
    auth = HTTPBasicAuth(USERNAME, APP_PASSWORD)

    # すべての投稿を削除
    delete_all_posts(WORDPRESS_URL, auth)

使い方

スクリプトをファイルとして保存し、実行する。requestsライブラリのインストールが事前に必要。

また、以下を環境変数として登録している(テストするだけならハードコーディングでもよい)

  • WORDPRESS_USERNAME
  • WORDPRESS_APP_PASSWORD

アプリパスワードについては以下の記事を参照。

目次