WordPressを単なるブログ管理ツールとしてだけでなく、強力な「バックエンド・データベース」や「ヘッドレスCMS」として進化させる機能。それがWordPress REST APIです。
本記事では、エンジニアや自動化ツール開発者に向けて、REST APIの基礎知識から、安全な認証方法、PythonやPHPによる具体的な操作サンプル、そして実務で直面する応用例までを網羅的に解説します。この記事を読めば、WordPressを外部アプリから自由自在に操作できるようになります。
1. WordPress REST APIとは?基礎とメリット
WordPress REST APIは、HTTPリクエストを通じてWordPressのデータ(投稿、固定ページ、ユーザー、タクソノミーなど)をJSON形式で取得・操作できるインターフェースです。
なぜREST APIが重要なのか?
従来のWordPress開発は、PHPテンプレート内で完結するものが主流でした。しかし、REST APIを活用することで以下のようなモダンな開発が可能になります。
- ヘッドレスWordPress: フロントエンドにReactやVue.js、Next.jsを採用し、データ管理のみをWordPressで行う。
- モバイルアプリ連携: iOS/Androidアプリから直接記事を投稿・閲覧する。
- 業務自動化: Pythonなどで収集したデータを自動でWordPressに流し込む。
- マルチプラットフォーム展開: 1つのWordPressから、Webサイト、アプリ、SNSへとコンテンツを同時配信する。
2. 基本的なデータ取得(GETリクエスト)
特別な設定なしでも、公開されている情報はブラウザやコマンドラインからすぐに確認できます。まずは自分のサイトのデータがどう見えるか確認しましょう。
エンドポイントの構造
基本となるURL(エンドポイント)は以下の通りです。
https://your-domain.com/wp-json/wp/v2/posts
代表的なGETリクエストの例
- 最新記事10件を取得:
/wp-json/wp/v2/posts - 特定の記事(ID:123)を取得:
/wp-json/wp/v2/posts/123 - 特定のカテゴリー(ID:5)の記事を取得:
/wp-json/wp/v2/posts?categories=5 - キーワード検索結果を取得:
/wp-json/wp/v2/posts?search=キーワード
3. 認証方法:アプリケーションパスワードの設定
データの取得(GET)は公開設定であれば誰でも可能ですが、新規投稿(POST)、更新(PUT)、削除(DELETE)を行うには「誰が操作しているか」を証明する認証が必要です。
現在は、WordPress 5.6以降で標準搭載された「アプリケーションパスワード」を利用するのが最も推奨される方法です。
設定手順
- WordPress管理画面の「ユーザー」→「プロフィール」へ移動します。
- 下部にある「新しいアプリケーションパスワード名」に任意の名前(例:MyPythonApp)を入力します。
- 「新しいアプリケーションパスワードを追加」をクリック。
- 表示された24文字のパスワード(例:abcd efgh ijkl mnop qrst uvwx)を必ず控えてください。※一度閉じると二度と表示されません。
4. 実践例1:Pythonを使用して外部から自動投稿する
外部サーバーやローカル環境からPythonを使って、WordPressに記事を自動投稿するスクリプトです。スクレイピング結果の自動反映や、AI生成コンテンツの投稿に最適です。
Pythonコードサンプル
import requests
import json
import base64
# --- 設定情報 ---
SITE_URL = "https://your-domain.com"
USER_NAME = "your_username"
# 先ほど取得したアプリケーションパスワード(スペース込み)
APP_PASSWORD = "abcd efgh ijkl mnop qrst uvwx"
# 認証情報の作成(Basic認証)
auth_credentials = f"{USER_NAME}:{APP_PASSWORD}"
base64_auth = base64.b64encode(auth_credentials.encode()).decode()
headers = {
"Authorization": f"Basic {base64_auth}",
"Content-Type": "application/json"
}
# --- 投稿内容の設定 ---
post_content = {
"title": "REST APIを活用した自動投稿のテスト",
"content": "<p>これはPythonスクリプトからAPI経由で作成された記事です。</p><p>HTMLタグも使用可能です。</p>",
"status": "publish", # 'publish'なら即公開、'draft'なら下書き
"categories": [1], # カテゴリーID(配列)
"tags": [5, 12], # タグID(配列)
"format": "standard"
}
# 実行
endpoint = f"{SITE_URL}/wp-json/wp/v2/posts"
response = requests.post(endpoint, headers=headers, data=json.dumps(post_content))
# 結果判定
if response.status_code == 201:
print("投稿に成功しました!")
data = response.json()
print(f"URL: {data.get('link')}")
else:
print(f"エラーが発生しました: {response.status_code}")
print(response.text)
5. 実践例2:PHP(wp_remote_post)によるサイト間連携
WordPressサイトAから、別のWordPressサイトBへデータを送信する場合の例です。WordPress標準関数の wp_remote_post を使用します。
PHPコードサンプル(functions.php等で使用)
function my_sync_post_to_external_site($post_id) {
// 投稿が保存されたときに、別サイトにも同じ内容を飛ばす例
$target_url = 'https://another-site.com/wp-json/wp/v2/posts';
$username = 'admin_user';
$app_password = 'abcd efgh ijkl mnop qrst uvwx';
$post = get_post($post_id);
// リクエストの組み立て
$response = wp_remote_post($target_url, [
'headers' => [
'Authorization' => 'Basic ' . base64_encode("$username:$app_password"),
'Content-Type' => 'application/json'
],
'body' => json_encode([
'title' => $post->post_title,
'content' => $post->post_content,
'status' => 'publish'
])
]);
if (is_wp_error($response)) {
error_log('API Sync Error: ' . $response->get_error_message());
}
}
// 投稿保存時に実行するフック例
// add_action('publish_post', 'my_sync_post_to_external_site');
6. 実践例3:JavaScript (Fetch API) でフロントエンドに表示
外部サイトや静的HTMLから、WordPressの新着記事を表示させる方法です。
JSコードサンプル
async function fetchLatestPosts() {
const response = await fetch('https://your-domain.com/wp-json/wp/v2/posts?per_page=5');
const posts = await response.json();
const container = document.getElementById('post-list');
posts.forEach(post => {
const item = `
<div class="post-item">
<h3><a href="${post.link}">${post.title.rendered}</a></h3>
<div>${post.excerpt.rendered}</div>
</div>
`;
container.innerHTML += item;
});
}
fetchLatestPosts();
7. カスタムフィールド(Post Meta)をAPIで扱う方法
デフォルトの状態では、Advanced Custom Fields (ACF) や自作のカスタムフィールドはAPIレスポンスに含まれません。これを有効化するには、テーマの functions.php に以下の設定が必要です。
カスタムフィールドの露出設定
register_meta('post', 'my_custom_field_name', [
'show_in_rest' => true,
'single' => true,
'type' => 'string', // 数値なら 'number'
]);
この設定を行うことで、API経由での取得・更新が可能になります。
8. セキュリティとパフォーマンスの最適化
REST APIを開放することは、便利である反面、攻撃の隙を与える可能性もあります。以下の対策を検討してください。
① ユーザー情報の秘匿
デフォルトでは /wp-json/wp/v2/users にアクセスすると、ユーザー名やIDが丸見えになります。不要な場合は制限をかけましょう。
add_filter('rest_endpoints', function ($endpoints) {
if (isset($endpoints['/wp/v2/users'])) {
unset($endpoints['/wp/v2/users']);
}
return $endpoints;
});
② 特定のIPアドレス以外からの認証を拒否
自動投稿を行うサーバーが固定されているなら、Webサーバー(.htaccess)やセキュリティプラグインで、 /wp-json/ へのアクセス制限をかけるのが最も安全です。
③ パフォーマンス対策
APIリクエストが頻発すると、WordPressの処理(PHP/MySQL)が走り、サーバーに負荷がかかります。
- キャッシュの導入: 「WP REST Cache」などのプラグインを使用。
- フィールドの絞り込み:
_fieldsパラメータを使い、必要なデータのみを取得する。
9. まとめ:WordPressを「システム」の核にする
WordPress REST APIを使いこなせるようになると、WordPressは単なるブログツールから、あらゆるアプリケーションの核となるコンテンツ管理システム(CMS)へと変貌します。
- 自動化: 定期的な情報更新をプログラムに任せる。
- 分離: デザインは最新のJSフレームワーク、管理は慣れ親しんだWordPress。
- 拡張: 既存の業務システムとのシームレスな連携。
まずは、今回ご紹介したPythonによる自動投稿から試してみてください。手動で行っていた作業がコード一行で解決する快感は、一度味わうと戻れません。
次なるステップ:
さらに高度な連携を目指すなら、カスタムエンドポイントの作成や、JWT(JSON Web Token)によるセキュアな認証にも挑戦してみましょう。WordPressの可能性はまだまだ広がります。


コメント