WordPressといえば、「Webサイトを公開するツール」「ブログを書くツール」というイメージが強いです。
ですが、実際にはモダンなWebアプリ開発やAI連携の基盤としても使われています。

その中心にあるのが、WordPress REST APIという技術です。

WordPressのREST APIを理解すると、例えばこんなことが実現できます。

  • 別ドメインのサイトにWordPressの記事を表示する
  • React・Next.jsなどのモダンなフレームワークとWordPressを組み合わせる
  • スマホアプリとWordPressのデータを連携させる
  • AIで生成した記事をWordPressに自動投稿する
  • ChatGPT・ClaudeなどのAIとWordPressを直接つなぐ

こちらの記事では、REST APIをまったく知らない方でも順番に読むだけで理解できるようにまとめました。
基礎から実践的な活用方法まで一通り解説するので、WordPressのREST APIを使ってみたい方は、最後までお読みください。

目次
  1. WordPress REST APIとは?
  2. エンドポイントの基本を理解する
  3. 主要なエンドポイント一覧
  4. よく使うパラメータとデータ取得の実例
  5. カスタムエンドポイントを作成する
  6. WordPress REST APIセキュリティ対策
  7. WordPress REST APIの活用シーン・実例紹介
  8. まとめ

WordPress REST APIとは?

まず、REST APIという言葉の意味から整理します。

RESTとAPIをそれぞれ簡単に説明

API(Application Programming Interface)とは、
異なるシステムやアプリケーションが互いにデータのやり取りするための「窓口」のようなものです。

例えば、
天気予報アプリがGoogleマップのAPIを使って地図を表示したり
ECサイトがクレジットカード会社のAPIを使って決済を処理したり
と、様々な場面で使用されている仕組みです。

一方、REST(REpresentational State Transfer)は、
そのAPIの設計方式のひとつで、「HTTPリクエストを使って、データの取得・作成・更新・削除を行う」という考え方に基づいています。

つまりWordPress REST APIとは、WordPressのデータをHTTPリクエスト経由で外部から操作できるようにする仕組みのことです。

WordPress REST APIでできること

WordPress REST APIを使うと、以下のことが実現できます。

  • 投稿・固定ページ・メディアなどのデータをJSON形式で取得する
  • 外部のプログラム(JavaScript・Python・PHPなど)からWordPressに記事を投稿する
  • スマホアプリ・別サイト・外部サービスとWordPressを連携させる
  • WordPressをヘッドレスCMSとして使い、フロントエンドを自由に構築する
  • AIと連携して記事の自動生成・自動投稿を実現する

以前は、WordPressのデータにアクセスするには管理画面にログインするか、PHPコードからWordPress関数を呼び出す必要がありました。
ですが、REST APIが登場したことで、言語やプラットフォームを問わず、URLにアクセスするだけでWordPressのデータを扱えるようになったわけです。

WordPressのどのバージョンから使えるか

WordPress REST APIは段階的に導入されました。

  • WordPress 4.4(2015年):REST APIの基盤が導入
  • WordPress 4.7(2016年):コンテンツエンドポイントが正式に統合され、プラグイン不要で使えるように
  • WordPress 5.0以降:ブロックエディター(Gutenberg)自体がREST APIを使って動作するように

現在のWordPressは管理画面のGutenbergエディターやWooCommerceも内部的にREST APIを使っています
つまりREST APIはWordPressの中核機能のひとつです。

エンドポイントの基本を理解する

REST APIを使うには、まずエンドポイントの概念を理解する必要があります。

エンドポイントとは?

エンドポイントとは、APIにアクセスするための「目的別の入口URL」のことです。

図書館に「本を借りる窓口」「返却する窓口」など目的ごとに窓口が分かれているように、
REST APIも目的によってアクセスするURLが変わります。

  • 記事一覧が欲しい → /wp-json/wp/v2/posts
  • 画像が欲しい → /wp-json/wp/v2/media
  • カテゴリーが欲しい → /wp-json/wp/v2/categories

「エンドポイント=APIの目的別の入口URL」と覚えておけばOKです。

エンドポイントのURL構造

WordPress REST APIのエンドポイントは、以下のURL構造になっています。

https://example.com/wp-json/wp/v2/{リソース名}

各部分の意味はこちらです。

  • https://example.com:WordPressサイトのURL
  • /wp-json/:REST APIのベースパス(固定)
  • wp/v2/:名前空間とバージョン(WordPressコアAPIはwp/v2)
  • {リソース名}:取得したいデータの種類(posts・pages・mediaなど)

例えば、記事一覧を取得したい場合のURLはこうなります。

https://example.com/wp-json/wp/v2/posts

主要なHTTPメソッド一覧

REST APIでは、操作の種類に応じてHTTPメソッドを使い分けます。

メソッド用途具体例
GETデータを取得する記事一覧・個別記事の取得
POST新しいデータを作成する記事の新規投稿、メディアのアップロード
PUT / PATCH既存データを更新する記事の編集・更新
DELETEデータを削除する記事・メディアの削除
OPTIONS利用可能な操作を確認するエンドポイントの仕様確認

データの取得(GET)は、認証なしで行えます。
しかし、投稿・更新・削除(POST・PUT・DELETE)を行うに認証が必要になります。

ブラウザで実際に叩いてみる

REST APIを試す最も手軽な方法は、ブラウザのアドレスバーに直接URLを入力することです。

ご自身のWordPressサイトのURLに合わせて、以下のURLにアクセスしてみてください。

https://example.com/wp-json/wp/v2/posts

アクセスすると、JSONと呼ばれる形式のデータが表示されます。
一見「呪文のような文字の羅列」に見えますが、
記事のタイトル・本文・日付・IDなどが構造化されて入っています。

JSONビューアーを使うと見やすくなります

ブラウザの拡張機能「JSON Viewer」などをインストールすると、
見にくいJSONが色分けされて見やすくなるのでおすすめです。

主要なエンドポイント一覧

WordPress REST APIで用意されている主なエンドポイントを確認しておきましょう。

投稿(posts)

// 記事一覧を取得
GET https://example.com/wp-json/wp/v2/posts

// 特定の記事を取得(IDが123の記事)
GET https://example.com/wp-json/wp/v2/posts/123

// 記事を新規投稿(認証必要)
POST https://example.com/wp-json/wp/v2/posts

// 記事を更新(認証必要)
PUT https://example.com/wp-json/wp/v2/posts/123

// 記事を削除(認証必要)
DELETE https://example.com/wp-json/wp/v2/posts/123

固定ページ(pages)

// 固定ページ一覧を取得
GET https://example.com/wp-json/wp/v2/pages

// 特定の固定ページを取得
GET https://example.com/wp-json/wp/v2/pages/456

メディア(media)

// メディアライブラリの一覧を取得
GET https://example.com/wp-json/wp/v2/media

// 特定のメディアを取得
GET https://example.com/wp-json/wp/v2/media/789

カテゴリー・タグ(categories / tags)

// カテゴリー一覧を取得
GET https://example.com/wp-json/wp/v2/categories

// タグ一覧を取得
GET https://example.com/wp-json/wp/v2/tags

ユーザー(users)

// ユーザー一覧を取得
GET https://example.com/wp-json/wp/v2/users

【重要】/usersエンドポイントのセキュリティに注意
ユーザー一覧のエンドポイントは、デフォルトでログインユーザー名(スラッグ)が外部に公開されます。
ユーザー名が分かると、ブルートフォース攻撃(総当たり攻撃)のリスクが高まります。
セキュリティ対策については後述のセクションで解説します。

よく使うパラメータとデータ取得の実例

エンドポイントにパラメータを付けることで、取得するデータを細かく制御できます。

取得件数・ページネーション(per_page・page)

デフォルトでは1回のリクエストで10件取得されます。
件数やページを変更したい場合は以下のパラメータを使います。

// 1回で5件取得する
https://example.com/wp-json/wp/v2/posts?per_page=5

// 2ページ目を取得する(per_pageと組み合わせて使う)
https://example.com/wp-json/wp/v2/posts?per_page=5&page=2

// 最大100件まで取得可能(per_page=100が上限)
https://example.com/wp-json/wp/v2/posts?per_page=100

カテゴリーやタグで絞り込む(categories・tags)

特定のカテゴリーやタグの記事だけ取得したい場合は、
カテゴリーIDまたはタグIDを指定します。

// カテゴリーID=5の記事を取得
https://example.com/wp-json/wp/v2/posts?categories=5

// タグID=12の記事を取得
https://example.com/wp-json/wp/v2/posts?tags=12

// カテゴリーID=5かつタグID=12の記事を取得
https://example.com/wp-json/wp/v2/posts?categories=5&tags=12

キーワード検索(search)

// タイトルや本文に「WordPress」を含む記事を取得
https://example.com/wp-json/wp/v2/posts?search=WordPress

フィールドを絞って軽量化する(_fields)

デフォルトのレスポンスには非常に多くの情報が含まれています。
必要なフィールドだけを指定することで、データ量を大幅に減らしてパフォーマンスを改善できます。

// タイトル・URL・日付だけ取得する
https://example.com/wp-json/wp/v2/posts?_fields=id,title,link,date

JavaScriptで記事一覧を取得するサンプルコード

実際にJavaScriptからREST APIを呼び出す基本的なコードを紹介します。

// Fetch APIを使った記事一覧の取得
fetch('https://example.com/wp-json/wp/v2/posts?per_page=5&_fields=id,title,link,date')
  .then(response => response.json())
  .then(posts => {
    posts.forEach(post => {
      console.log(post.title.rendered); // 記事タイトル
      console.log(post.link);           // 記事URL
      console.log(post.date);           // 投稿日時
    });
  })
  .catch(error => console.error('エラー:', error));

_fields=id,title,link,dateで必要なフィールドのみ絞っているため、レスポンスが軽くなり処理も速くなります。

カスタムエンドポイントを作成する

WordPressが用意している標準エンドポイントだけでなく、
functions.phpに記述することで独自のエンドポイントを追加できます。

register_rest_route()の基本構文

カスタムエンドポイントの登録には register_rest_route() を使います。

add_action( 'rest_api_init', function() {
    register_rest_route(
        '名前空間/v1',          // 名前空間(ユニークな文字列)
        '/エンドポイント名/',    // エンドポイントのパス
        array(
            'methods'             => 'GET',             // HTTPメソッド
            'callback'            => 'コールバック関数名', // 実行する関数
            'permission_callback' => '__return_true',   // アクセス制限
        )
    );
});

シンプルなGETエンドポイントを作る実例

例として、最新5件の記事タイトルとURLだけを返すカスタムエンドポイントを作ってみます。

add_action( 'rest_api_init', function() {
    register_rest_route( 'mysite/v1', '/latest-posts/', array(
        'methods'             => 'GET',
        'callback'            => 'mysite_get_latest_posts',
        'permission_callback' => '__return_true', // 誰でもアクセス可
    ) );
} );

function mysite_get_latest_posts( $request ) {
    $posts = get_posts( array(
        'numberposts' => 5,
        'post_status' => 'publish',
    ) );

    $data = array();
    foreach ( $posts as $post ) {
        $data[] = array(
            'id'    => $post->ID,
            'title' => get_the_title( $post->ID ),
            'url'   => get_permalink( $post->ID ),
            'date'  => $post->post_date,
        );
    }

    return rest_ensure_response( $data );
}

このコードを追加すると、以下のURLでアクセスできます。

https://example.com/wp-json/mysite/v1/latest-posts/

register_rest_field()で既存レスポンスにフィールドを追加する

標準エンドポイントのレスポンスにカスタムフィールドの値を追加したい場合は
register_rest_field()が便利です。

add_action( 'rest_api_init', function() {
    register_rest_field(
        'post',               // 対象の投稿タイプ
        'my_custom_field',    // 追加するフィールド名
        array(
            'get_callback' => function( $post_arr ) {
                return get_post_meta( $post_arr['id'], 'my_custom_field', true );
            },
            'schema' => array(
                'type'        => 'string',
                'description' => 'カスタムフィールドの値',
            ),
        )
    );
} );

これにより /wp/v2/posts のレスポンスに
my_custom_field の値が自動的に含まれるようになります。

名前空間はユニークにしましょう

カスタムエンドポイントの名前空間は、他のプラグインや標準APIと衝突しないようにしましょう。
サイト名や会社名を含んだユニークな文字列にしておくのが鉄則です。
(例:mycompany/v1、gachiserver/v1 など)

WordPress REST APIセキュリティ対策

WordPressのREST APIを使う上で、セキュリティ面の知識も必要になります。
よくある誤解も含めて整理しておくのでチェックしてみましょう。

ユーザー情報(/users)が公開される問題と対処法

デフォルトでは /wp-json/wp/v2/users にアクセスすると、
投稿者のユーザー名(スラッグ)が外部に公開されます。

ユーザー名はログインに使うIDでもあるため、
これが流出するとブルートフォース攻撃のリスクが高まります。

対処法として、functions.phpに以下を追加することで、
ログインしていないユーザーからのusersエンドポイントへのアクセスを制限できます。

// 未ログインユーザーへのusersエンドポイントを制限
add_filter( 'rest_endpoints', function( $endpoints ) {
    if ( ! is_user_logged_in() ) {
        if ( isset( $endpoints['/wp/v2/users'] ) ) {
            unset( $endpoints['/wp/v2/users'] );
        }
        if ( isset( $endpoints['/wp/v2/users/(?P<id>[\d]+)'] ) ) {
            unset( $endpoints['/wp/v2/users/(?P<id>[\d]+)'] );
        }
    }
    return $endpoints;
} );

REST APIのアクセスを制限する方法

特定の条件(ログイン済みのみ、管理者のみなど)でREST APIへのアクセスを制限するには、
rest_authentication_errors フィルターを使います。

// ログイン済みユーザーのみREST APIを許可する
add_filter( 'rest_authentication_errors', function( $result ) {
    // すでに認証エラーが発生している場合はそのまま返す
    if ( true === $result || is_wp_error( $result ) ) {
        return $result;
    }

    // ログイン済みユーザーは許可
    if ( is_user_logged_in() ) {
        return $result;
    }

    // 未ログインはエラーを返す
    return new WP_Error(
        'rest_not_logged_in',
        'ログインが必要です。',
        array( 'status' => 401 )
    );
} );

完全に無効化してはいけない理由

「REST APIは使わないから全部無効にすればいい」と考える方も多いですが、
これは推奨されません。

REST APIを完全に無効化すると、以下に影響が出る可能性があります。

  • Gutenberg(ブロックエディター)が正常に動作しなくなる
  • WooCommerceの一部機能が使えなくなる
  • REST APIを利用しているプラグイン全般に影響が出る
  • Contact Form 7・Akismetなど定番プラグインが動かなくなるケースがある

「全部無効化」ではなく、必要なエンドポイントだけ制限するというアプローチが正解です。

特定のエンドポイントだけ制限する方法

特定のルートだけ許可し、それ以外を制限するコードです。
Contact Form 7やAkismetなど必須プラグインのエンドポイントは許可リストに入れておきます。

add_filter( 'rest_authentication_errors', function( $result ) {
    if ( true === $result || is_wp_error( $result ) ) {
        return $result;
    }

    // 編集権限のあるログイン済みユーザーは全て許可
    if ( current_user_can( 'edit_posts' ) ) {
        return $result;
    }

    // 許可するエンドポイント(プラグインに必要なルートを追加)
    global $wp;
    $rest_route = isset( $wp->query_vars['rest_route'] )
        ? $wp->query_vars['rest_route']
        : '';

    $allowed_routes = array(
        '/oembed/1.0',         // 埋め込み用
        '/contact-form-7/v1',  // Contact Form 7
        '/akismet/v1',         // Akismet
    );

    foreach ( $allowed_routes as $route ) {
        if ( strpos( $rest_route, $route ) === 0 ) {
            return $result;
        }
    }

    return new WP_Error(
        'rest_forbidden',
        'このAPIへのアクセスは制限されています。',
        array( 'status' => 403 )
    );
} );

WordPress REST APIの活用シーン・実例紹介

WordPress REST APIが実際にどんな場面で使われているか、具体的なシーンを紹介します。

別サイト・別ドメインへの記事データ連携

複数のサイトを運営していて、A社のWordPressに書いた記事をB社のWebサイトにも表示したい
というケースによく使われます。

GETリクエストでJSON形式のデータを取得するだけなので、
PHPもJavaScriptも、どんな言語からでもWordPressの記事を引っ張ってこられます。

【活用例】
・グループ会社サイトで本体WordPressのお知らせ記事を共有表示する
・静的サイトのトップページにWordPressの最新記事を表示する
・LP(ランディングページ)にWordPressのブログ記事一覧を埋め込む

ヘッドレスCMSとして使う(Next.js / React連携)

ヘッドレスCMSとは、コンテンツ管理(バックエンド)表示部分(フロントエンド)を分離した構成のことです。

WordPressをヘッドレスCMSとして使うと、

  • コンテンツ管理は使い慣れたWordPress管理画面で行う
  • フロントエンドはNext.jsやReactで高速・モダンなUIを構築する
  • REST APIでWordPressのデータをフロント側に渡す

という構成が実現できます。
表示速度・SEO・ユーザー体験すべてを改善できるため、
大規模なメディアサイトや企業サイトでよく採用されています。

スマホアプリとのデータ連携

iOSやAndroidアプリを開発する際、
コンテンツ管理システムとしてWordPressを活用するケースがあります。

アプリ側からREST APIのGETリクエストを送ることで、
WordPressの記事・画像・カテゴリーなどを取得して表示できます。

CMSを別途用意する必要がなく、すでにWordPressサイトを持っている場合は追加コストなしで実現できるのが魅力です。

外部サービスとの自動連携(Slack・Zapier)

ZapierやMakeなどのノーコード自動化ツールとREST APIを組み合わせることで、
プログラムを書かずにWordPressと外部サービスをつなげることができます。

【活用例】
・WordPressで記事を公開したら、自動的にSlackに通知を送る
・新しい記事が追加されたら、メールマガジンの配信を自動でトリガーする
・問い合わせフォームの送信データをGoogleスプレッドシートに自動保存する

AIとの連携【2025年〜注目の活用法】

2025年以降、WordPressとAIを組み合わせた活用事例が急増しています。
大きく3つの使い方に整理できます。

① AIで生成した記事をREST API経由で自動投稿する

ChatGPTやClaudeなどのAI APIで記事を生成し、
REST APIのPOSTリクエストでWordPressに自動投稿する仕組みです。

実際にClaude Codeを使ってこの仕組みを構築した事例も増えており、

① Claude APIにキーワードを渡して記事を自動生成
② 生成した記事をREST API経由でWordPressの下書きとして保存
③ 人間がチェックして公開ボタンを押す(半自動化)

というワークフローで、記事作成の大幅な効率化を実現している方が増えています。

自動投稿の基本的なコードは以下のようになります。

// JavaScript(Node.js)からWordPressに記事を自動投稿する例
const response = await fetch('https://example.com/wp-json/wp/v2/posts', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    // Application Passwordsを使った認証
    'Authorization': 'Basic ' + btoa('ユーザー名:アプリケーションパスワード'),
  },
  body: JSON.stringify({
    title:   'AIが生成した記事タイトル',
    content: 'AIが生成した記事本文...',
    status:  'draft', // 'draft'(下書き)または'publish'(公開)
  }),
});

const post = await response.json();
console.log('投稿完了。記事ID:', post.id);

👉 認証にはApplication Passwords(アプリケーションパスワード)を使うのが現在の標準的な方法です。
WordPress 5.6から標準機能として搭載されており、管理画面の「ユーザー」→「プロフィール」から発行できます。

② WordPress × MCP(Model Context Protocol)連携

2025年から注目されているMCP(Model Context Protocol)という仕組みを使うと、
ClaudeやChatGPTがWordPressを「ツール」として直接操作できるようになります。

通常はAIに「記事を書いて」と頼んでも、
生成した文章を手動でWordPressに貼り付ける必要がありました。

MCPを使うと、AIが自律的に

・WordPressの記事一覧を確認する
・新しい記事を作成・投稿する
・メディアをアップロードする
・カテゴリーやタグを管理する

といった操作をREST API経由で行えるようになります。

WordPressの公式チームもMCP対応を開発中で、
「AI Engine」などのプラグインを使えばコードなしでもMCP連携を実現できます。

③ AIチャットボットの応答にWordPressの記事を活用する

サイト内のよくある質問や記事コンテンツをAIチャットボットの知識として活用する使い方です。

REST APIでWordPressの記事データを取得し、
それをAIに渡すことで、「このサイトの内容に基づいて回答するAIチャットボット」を構築できます。

この仕組みはRAG(Retrieval-Augmented Generation:検索拡張生成)と呼ばれ、
問い合わせ対応の自動化・品質向上に活用する企業が増えています。

まとめ

WordPress REST APIについて、基礎から活用シーンまでひと通り解説しました。
最後にポイントを整理します。

  • WordPress REST APIはHTTPリクエストでWordPressのデータを外部から操作できる仕組み
  • エンドポイントは https://example.com/wp-json/wp/v2/{リソース名} の形式
  • GET(取得)は認証不要、POST・PUT・DELETE(作成・更新・削除)は認証が必要
  • パラメータ(per_page・categories・_fieldsなど)でデータを柔軟に絞り込める
  • register_rest_route()でカスタムエンドポイントを自作できる
  • セキュリティ対策は「全部無効化」ではなく「必要なものだけ制限」が正解
  • /usersエンドポイントは未ログインからのアクセス制限を検討する
  • 2025年以降はAI(ChatGPT・Claude)との連携が急速に広まっている

REST APIは最初は難しく感じるかもしれませんが、
まずはブラウザでエンドポイントを叩いてJSONを眺めてみることから始めるのがおすすめです。

WordPressは単なるサイト制作・ブログツールから、モダンな開発基盤へと進化しています。
WordPress REST APIを理解することで、WordPressの可能性が大きく広がります。