WordPressは、世界で最も人気のあるコンテンツ管理システム(CMS)の1つであり、中小企業から大企業まで、さまざまな形態のウェブサイトコンテンツのセットアップと作成を支援します。しかし、WordPressは従来型のブログコンテンツのサポートに限定されません。WordPress REST APIによりさらなる進化を遂げています。

WordPress REST APIは、WordPressと他の外部ウェブアプリケーションを接続します。これは、アクセス性が高まり、CMSプラットフォームとシームレスに統合された、没入感のある魅力的なウェブ体験を構築することができます。

APIでは、WordPressのコンテンツをJSONオブジェクトとして取得し、それの操作にはエンドポイントが使用されます。エンドポイントを使用することで、WordPressの管理者アカウントにログインすることなく、WordPressのコンテンツを遠隔で作成、読み取り、更新、削除(CRUD)することができます。

今回の記事では、WordPress REST APIとは何なのか、その利点、WordPressの基本的機能の拡張方法、独自のエンドポイントの作成・登録・アクセス方法についてご説明します。

前提条件

この説明に従うには、以下のものが必要になります。

WordPress REST APIを理解する

WordPress REST APIは、標準的なHTTPメソッドを使用してWordPressサイトとプログラムを介して対話することのできる強力なインターフェースです。

そのデフォルトの機能を利用し、投稿、固定ページ、コメント、ユーザー、タクソノミーなどのさまざまな種類のWordPressデータにJSON形式でアクセスし、操作することができます。また、コンテンツに対してCRUD操作を実行することも可能です。

しかし、WordPress REST APIの真価は、カスタムエンドポイントによる拡張性にあります。独自のエンドポイントを作成することで、機能の追加、サードパーティのサービスや独自のデータ構造の統合など、特定のニーズに合わせてAPIを調整できます。これの活用により、WordPress上に柔軟で機能豊富なアプリケーションを構築可能です。

カスタムAPIエンドポイントの計画方法

効率的なAPI開発のために、カスタムエンドポイントの構造と目的を計画することが重要です。特定の状況に合わせたエンドポイントには、慎重な検討が必要になります。戦略的な計画により、拡張性と適応性が促進され、日々変化するビジネスの要件に対応するエンドポイントの将来性が確保できます。

実装前のカスタムAPIエンドポイントの計画には以下のようなものがあります。

  • エンドポイント機能の明確化:エンドポイントの具体的な機能、予想されるデータ型、および使用法を明確にすることが重要です。
  • 一貫性と開発における効率性:エンドポイント、レスポンスタイプ、およびフォーマットの使用における一貫性も確保する必要があります。これによりAPIとのインタラクションが向上します。さらに、APIの目的を知ることで適切な実装が可能になり、開発時間とエラーのリスクを低減できます。
  • スケーラビリティと適応性:ゼロからの再設計を避けるために、ビジネスにおけるニーズや要件の変化に対応できるよう将来性を確保することが肝要です。
  • セキュリティ:エンドポイントの計画を綿密に行うことで、データへのアクセスや操作に認証が必要かどうかを判断できます。API経由でコンテンツを取得する場合、ユーザー認証が不要なこともあります。とはいえ、機密データや未承認データを含むコンテンツについては、セキュリティ要件を定義し、データセキュリティを確保するための認証やアクセスコントロールなどの手段を導入することが不可欠です。

この後のハンズオンセクションでは、site-domain/wp-json/custom/v2/testimonialsでアクセス可能なエンドポイントを作成し、WordPressデータベースサイトから利用者の声(以下「お客様の声」とします)を取得する方法をご紹介します。

リクエストを送信すると、エンドポイントからコールバック関数で定義したWordPressサイトのお客様の声に関する情報がJSONオブジェクトとして返されます。

さっそく始めましょう。

エンドポイント用のカスタム投稿タイプを作成する

カスタム投稿タイプを作成するところから始めます。

  1. WordPress管理画面の「外観」セクションから「テーマの編集」に移動します。
  2. テーマのfunction.phpファイルを開き、以下のコードを追加します。
    function create_custom_testimonial_type() {
        register_post_type('testimonials', array(
            'labels' => array(
                'name' => 'Testimonials',
                'singular_name' => 'Testimonial',
            ),
            'public' => true,
            'has_archive' => true,
            'show_in_rest' => true, // これによりREST APIのサポートが可能になる
        ));
    }
    add_action('init', 'create_custom_testimonial_type');

    このコードにより、「testimonials」投稿タイプが作成され、WordPress REST APIサポート('show_in_rest' => true)を有効にします。このコードではadd_action hookcreate_testimonial_typeコールバック関数を呼び出しています。

    ラベルや引数は、必要に応じて削除したり追加したりしてカスタマイズできます。

  3. ファイルを更新」をクリックして変更を保存します。
    functions.phpファイルにカスタム「testimonial」投稿タイプを作成するコードのスクリーンショット
    custom_testimonial投稿タイプの作成

    管理画面を再読み込みして、Testimonialsオプションを確認します。

    作成したばかりの投稿タイプを示すスクリーンショット
    作成したばかりのお客様の声(testimonials)投稿タイプ

  4. Testimonials」>「新規追加」をクリックして、お客様の声専用の形式で投稿を作成します。例えば「プルクオート」ブロックなどを使用できます。どのように表示したいかによって、他のブロックを使用することもできます。

以下は、プルクオートブロックを使用して作成した2つの引用のサンプルです。

プルクオートブロックを使用して2つの引用を作成した様子のスクリーンショット
お客様の声を2つ追加してみた結果

WordPressにカスタムエンドポイントを登録する

カスタムエンドポイントを登録すると、REST API 経由で利用できるようになります。これには、register_rest_route関数を使用してrest_api_initフックで呼び出し、ルートがコールされたときに呼び出されるコールバックメソッドを提供します。

以下のコードをテーマのfunction.phpファイルに貼り付けます。

add_action( 'rest_api_init', 'register_testimonial_rest_route' );
 
function register_testimonial_rest_route(){
	register_rest_route(
		'custom/v2',
		'/testimonials',
		array(
			'methods' => 'GET',
			'callback' => 'get_testimonials',
		)
	);
}

このregister_rest_route()は3つのパラメータを受け取ります。

  • ルート名前空間$route_namespace):URLセグメントの最初の部分です。ベンダー/バージョン番号のパターンに従い、ベンダーまたはテーマのスラッグを表します。名前空間は、エンドポイントを区別する役割を果たし、利用者がカスタムエンドポイントについてサポートに連絡する際に有用です。この説明では、custom/v2という名前空間を使用します。
  • ベースURL$route):名前空間に続くもので、メソッドにマッピングされたURLです。ルートに複数のエンドポイントを登録することができます。ここでは、/testimonialsというルートを使います。これにより、エンドポイントがお客様の声を取得できるようになります。
  • エンドポイントのオプション$args):ルートを呼び出すときに使用するHTTPメソッドと、リクエストを送信するときにエンドポイントが呼び出すコールバック関数を含む配列です。このコールバック関数については、次のセクションで説明します。

最後に、エンドポイントのアドレスをメモしておきます。エンドポイントのフォーマットはsite-address/wp-json/namespace/routeになります。つまり、この例ではエンドポイントはhttps://www.staging.kidspartysanctuary.co.uk/wp-json/custom/v2/testimonialsです。

エンドポイントのコールバック関数を実装する

カスタム投稿タイプを作成し、カスタムエンドポイントを登録したら、続いてはコールバック関数の記述を行います。このコールバック関数が、エンドポイントにアクセスするたびに呼び出されます。

  1. 以下のコードを使用して、get_testimonialsコールバック関数を宣言します。
    function get_testimonials(){
    
    }
  2. 取得したWordPressのお客様の声データを格納できるように、空のtestimonialsという配列を初期化します。
    $testimonials = array();
  3. WP_Query呼び出しのクエリパラメータを伴うかたちで、$argsという配列をセットアップします。
    $args = array(
        'post_type' => 'testimonials', //カスタム投稿タイプにクエリを出すことを指定   
    'testimonial',
        'nopaging' => true,  // ページネーションなしですべてのお客様の声を一度に取得
    ),
  4. $args配列を取り込み、指定されたパラメータに基づいてクエリを実行し、WordPress クエリの結果を$query変数に格納するWP_Queryクラスのインスタンスを作成します。
    $query = new WP_Query($args)
  5. お客様の声に該当する投稿があるかどうかをチェックする条件文を書きます。そして、whileループを作成して投稿を繰り返し処理し、投稿のtitlecontentを返します。
    if ( $query->have_posts() ) {
            while ( $query->have_posts() ) {
                $query->the_post();
                $testimonial_data = array( /*すべての投稿のタイトルと内容を格納する配列*/
                'title' => get_the_title(),
                    'content' => get_the_content(),
                    // 必要に応じて他のフィールドを追加
                );
                $testimonials[] = $testimonial_data; 
            }
            wp_reset_postdata(); /*その後のクエリで干渉が発生しないように$postグローバルの値を現在の投稿に復元*/
        }
        return rest_ensure_response( $testimonials ); /*一貫性を保つために、レスポンスがレスポンスオブジェクトとして正しく設定されるようにする*/

    以下がコードの全体像です。

    function get_testimonials() {
    $testimonials = array();
    $args = array(
        'post_type' => 'testimonials',
        'nopaging' => true,
    );
    $query = new WP_Query( $args );
    if ( $query->have_posts() ) {
        while ( $query->have_posts() ) {
            $query->the_post();
            $testimonial_data = array(
                'title' => get_the_title(),
                'content' => get_the_content(),
                // 必要に応じて他のフィールドを追加
            );
            $testimonials[] = $testimonial_data;
        }
        wp_reset_postdata();
    }
    return rest_ensure_response( $testimonials );
    }
  6. Postmanを使ってエンドポイントをテストし、データにアクセスできるかどうか確認してください。
    Testimonialカスタムエンドポイントへの Postman API呼び出し成功のスクリーンショット
    Postmanが問題なく機能している

    ブラウザを使ってテストすることもできます。ブラウザのアドレスバーに URLsite-domain/wp-json/custom/v2/testimonialsを入力してエンドポイントにアクセスしてください。すると以下のように表示されます。

    ウェブブラウザでエンドポイントに正常にアクセスできたことを示すスクリーンショット
    エンドポイントにアクセスしたときに表示されるブラウザの結果

まとめ

今回の記事では、WordPress APIのカスタムエンドポイントを実装する方法をご説明しました。コールバック関数を実装したルートを登録するだけで、WordPressのデータベースにある特定のデータにアクセスしてやりとりができるようになります。

事業の成長にWordPressを活用する方法をお探しでしょうか。Kinstaは、WordPress専用マネージドホスティングサービスをとおして、お客様のビジネスを加速させる数多くの高度な機能をご提供しています。例えば、Kinsta MU(標準搭載)プラグインにより、サイトのキャッシュを一括管理しパフォーマンスを引き上げることができます。今すぐKinstaをお試しください。

独自のWordPress APIエンドポイントを開発・設計したことはありますか?ご経験をお持ちでしたら、以下のコメント欄でお聞かせください。

Jeremy Holcombe Kinsta

Kinstaのコンテンツ&マーケティングエディター、WordPress開発者、コンテンツライター。WordPress以外の趣味は、ビーチでのんびりすること、ゴルフ、映画。高身長が特徴。