WP RESET API とは?

WP REST APIは、WordPress のデータを外部から取得・操作できるようにするためのAPIです。これを利用することで、JavaScriptや他のプログラミング言語からWordPressの投稿やユーザー情報などを取得・更新・削除できます。今回は、WP RESET APIの基本的な使い方などをまとめていきたいと思います。

  • 投稿データの取得・作成・更新・削除
  • ユーザー情報の取得・管理
  • カスタム投稿タイプやカスタムフィールドの操作
  • 非同期通信を用いた動的なデータ更新
  • JavaScriptフロントエンドとWordPressを統合したアプリ開発

基本的な使い方

WP REST API はデフォルトで /wp-json/wp/v2/ のエンドポイントを提供しています。

投稿一覧を取得する

JavaScript
fetch('/wp-json/wp/v2/posts')
  .then(response => response.json())
  .then(data => console.log(data));

このコードを実行すると、WordPressの投稿データがJSON形式で取得できます。

特定の投稿を取得する

JavaScript
fetch('/wp-json/wp/v2/posts/1')
  .then(response => response.json())
  .then(data => console.log(data));

ID1の投稿データを取得する例です。

投稿を作成する

投稿を作成するには、POSTリクエストを送る必要があります。この操作には認証が必要です。

JavaScript
fetch('/wp-json/wp/v2/posts', {
  method: 'POST', // POST
  headers: {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer YOUR_ACCESS_TOKEN'
  },
  body: JSON.stringify({
    title: '新しい投稿',
    content: 'これは WP REST API を使って作成した投稿です。',
    status: 'publish'
  })
})
  .then(response => response.json())
  .then(data => console.log(data));

このコードでは、YOUR_ACCESS_TOKENに適切な認証トークンを設定し、titlecontentを指定することで、新規投稿を作成します。

投稿を更新する

JavaScript
fetch('/wp-json/wp/v2/posts/1', {
  method: 'PUT', // PUT
  headers: {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer YOUR_ACCESS_TOKEN'
  },
  body: JSON.stringify({
    title: 'タイトルを更新しました'
  })
})
  .then(response => response.json())
  .then(data => console.log(data));

ID1の投稿タイトルを更新する例です。

投稿を削除する

JavaScript
fetch('/wp-json/wp/v2/posts/1', {
  method: 'DELETE', // DELETE
  headers: {
    'Authorization': 'Bearer YOUR_ACCESS_TOKEN'
  }
})
  .then(response => response.json())
  .then(data => console.log(data));

ID1の投稿を削除するコードです。

サンプルコード

カテゴリーやタグの取得

JavaScript
fetch('/wp-json/wp/v2/categories')
  .then(response => response.json())
  .then(data => console.log(data));

カテゴリーの一覧を取得できます。

メディアのアップロード

JavaScript
const formData = new FormData();
formData.append('file', imageFile);

fetch('/wp-json/wp/v2/media', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer YOUR_ACCESS_TOKEN'
  },
  body: formData
})
  .then(response => response.json())
  .then(data => console.log(data));

imageFileにアップロードするファイルを指定すると、WordPressに画像をアップロードできます。

カスタムエンドポイントの作成

PHPを使ってオリジナルの REST APIを作ることも可能です。

PHP
function my_custom_endpoint() {
    return new WP_REST_Response(['message' => 'Hello, World!'], 200);
}

add_action('rest_api_init', function() {
    register_rest_route('myplugin/v1', '/hello/', [
        'methods' => 'GET',
        'callback' => 'my_custom_endpoint'
    ]);
});

/wp-json/myplugin/v1/hello/にアクセスするとHello, World!を返します。

使用時の注意点

WP REST API を使用する際には、以下の点に注意が必要です。

認証が必要な操作には適切な認証方法を使う

投稿の作成・編集・削除などの操作を行う場合、認証が必要になります。

  • JWT Authentication for WP REST APIプラグインを利用することで、トークン認証が可能になります。
  • Basic認証やOAuthを設定する方法もありますが、セキュリティに注意が必要です。

外部サイトで利用する場合は CORS 設定に注意

別のドメイン(例: example.com から sample.com)から API を利用する場合、CORS(Cross-Origin Resource Sharing)の設定が必要です。

functions.phpに以下のコードを追加すると、CORSを許可できます。

PHP
function add_cors_headers() {
    header("Access-Control-Allow-Origin: *");
    header("Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS");
    header("Access-Control-Allow-Headers: Authorization, Content-Type");
}
add_action('rest_api_init', 'add_cors_headers');

ユーザー権限の管理を適切に行う

APIを介してデータを変更できるユーザーを制限しないと、サイトのセキュリティが脆弱になります。

  • 管理者権限を持つユーザーだけが投稿の作成・編集・削除ができるようにする
  • current_user_can('edit_posts')などを使い、ユーザー権限をチェックする

不要なエンドポイントの無効化

WordPressのREST APIはデフォルトで多くの情報を公開します。不要なエンドポイントは無効化することで、セキュリティを向上できます。

  • wp-json/wp/v2/usersでユーザー情報が取得できてしまうため、以下のコードで無効化可能です。
PHP
function disable_rest_endpoints($endpoints) {
    if (isset($endpoints['wp/v2/users'])) {
        unset($endpoints['wp/v2/users']);
    }
    return $endpoints;
}
add_filter('rest_endpoints', 'disable_rest_endpoints');

さいごに

WP REST API を使うことで、WordPress のデータを動的に操作できるようになります。フロントエンドで JavaScript を活用し、非同期でデータを取得・更新することで、より柔軟なアプリケーションを作成できます。

機能方法
投稿取得GET /wp-json/wp/v2/posts
投稿作成POST /wp-json/wp/v2/posts
投稿更新PUT /wp-json/wp/v2/posts/{id}
投稿削除DELETE /wp-json/wp/v2/posts/{id}
カテゴリー取得GET /wp-json/wp/v2/categories
画像アップロードPOST /wp-json/wp/v2/media
カスタムエンドポイントregister_rest_route() を使用

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です