【WordPress】WordPress REST APIで投稿データを外部アプリに配信する方法

【WordPress】WordPress REST APIで投稿データを外部アプリに配信する方法 WordPress

WordPressは標準でREST APIを備えており、投稿やページ、カスタム投稿タイプなどの情報をJSON形式で外部に配信できます。これにより、SPA(シングルページアプリケーション)やモバイルアプリ、外部のWebサービスと簡単に連携可能です。

この記事では、WordPressのREST APIで投稿データを取得し、外部アプリケーションに配信する基本的な方法とカスタマイズ方法を解説します。

スポンサーリンク

標準のREST APIエンドポイントで投稿を取得する

WordPressはデフォルトで以下のようなエンドポイントを提供しています。

REST APIエンドポイント
Example Domain

このURLにアクセスすると、最新の投稿一覧(デフォルト10件)がJSON形式で返されます。

特定の条件で投稿を絞り込む方法

REST APIではクエリパラメータを追加することで、投稿データをフィルタリングできます。

  • 特定のカテゴリの記事?categories=3(カテゴリIDが3の記事)
  • 投稿数を増やす?per_page=20
  • 特定のカスタム投稿タイプ/wp-json/wp/v2/<post_type>

例:イベント投稿タイプの一覧を取得する場合

カスタム投稿タイプの取得
Example Domain

投稿タイプ別のより詳しい取得方法はREST APIを使ったカスタム投稿データの取得方法で解説しています。

個別記事の詳細データを取得する

個別の投稿を取得したい場合は、IDを指定します。

個別記事の取得
Example Domain

このリクエストでは、IDが123の投稿データがJSONで返されます。

カスタムフィールド(ACF)も取得したい場合

ACF(Advanced Custom Fields)を使用している場合、標準のREST APIではフィールドは取得できません。ACF 5.11以降であれば、無料版・PRO版のどちらでもフィールドグループの「Show in REST API」を有効化することで取得可能です(ACF公式ブログで確認)。

acf_formatパラメーターの指定
Example Domain

または、テーマのfunctions.phpに以下のようなコードを追加することで、独自にフィールドを追加することも可能です。

functions.php:カスタムフィールドをレスポンスに追加
function add_custom_fields_to_api($response, $post, $request) {
  $custom_field = get_post_meta($post->ID, 'custom_key', true);
  $response->data['custom_key'] = $custom_field;
  return $response;
}
add_filter('rest_prepare_post', 'add_custom_fields_to_api', 10, 3);

認証が必要なAPIへのアクセス方法

非公開投稿や管理系APIにアクセスする場合は、認証が必要です。主な方法は以下の通りです。

  • Application Passwords(WordPress 5.6以降)
  • Cookie認証(同一ドメイン用)
  • JWT(JSON Web Token)認証(プラグインで追加可能)

例えば、Application Passwordsを使ったベーシック認証形式は以下のようになります。

Basic認証ヘッダーの形式
Authorization: Basic base64_encode("username:application-password")

カスタムエンドポイントを作成して配信データを制御する

必要に応じて独自のREST APIエンドポイントを作成することもできます。

functions.php:カスタムエンドポイントの追加
function register_custom_api_route() {
  register_rest_route('myapi/v1', '/latest/', array(
    'methods' => 'GET',
    'callback' => 'my_custom_api_callback',
    'permission_callback' => '__return_true', // 公開エンドポイントであることを明示
  ));
}

function my_custom_api_callback($request) {
  $args = array(
    'post_type' => 'post',
    'posts_per_page' => 5,
  );
  $posts = get_posts($args);
  $data = array();

  foreach ($posts as $post) {
    $data[] = array(
      'title' => get_the_title($post),
      'link' => get_permalink($post),
    );
  }

  return rest_ensure_response($data);
}

add_action('rest_api_init', 'register_custom_api_route');

上記を追加することで、以下のようなエンドポイントから投稿タイトルとリンクのJSONを取得できます。

カスタムエンドポイントのURL
Example Domain
permission_callbackは省略できない
WordPress 5.5以降、register_rest_route()permission_callbackを省略すると_doing_it_wrong()通知が発生します。誰でもアクセスできる公開エンドポイントにする場合は__return_trueを、権限チェックが必要な場合は適切な判定関数を指定してください。詳しくはヘッドレスCMS化への第一歩|REST APIを使って外部アプリと連携する方法でも解説しています。

よくある質問(FAQ)

QREST APIのレスポンスに独自フィールドを追加するには?
Aregister_rest_field()でフィールドを登録します。register_rest_field(‘post’, ‘my_field’, array(‘get_callback’ => function($post){ return get_post_meta($post[‘id’], ‘key’, true); }))のように実装します。
QREST APIの認証方法にはどのようなものがありますか?
AWordPressのnonce認証(ログイン済みユーザー向け)、JWT認証(JWT Authentication for WP-REST APIプラグイン)、Application Passwords(WordPress 5.6以降標準搭載)の3種類が主に使われます。
Q外部アプリからREST APIで記事を作成・更新するには?
APOST /wp-json/wp/v2/postsでApplication Passwordsを使った認証ヘッダーを付けてリクエストします。認証にはAuthorization: Basic base64(username:app_password)ヘッダーを使います。

まとめ

WordPress REST APIを活用すれば、投稿データを外部アプリケーションに柔軟に配信できます。標準機能でも基本的な取得は可能ですが、必要に応じてカスタムフィールドの追加やカスタムエンドポイントの作成で、さらに高度な情報提供が可能になります。

外部連携やフロントエンド分離(ヘッドレスCMS)を検討している方は、ぜひREST APIの活用を取り入れてみてください。