REST APIを使用したWordPress間の簡易的なデータ送受信方法

2024-12-05
ホーム WordPress REST API REST APIを使用したWordPress間の簡易的なデータ送受信方法
クラウドソーシング「ランサーズ」
REST APIを使用したWordPress間の簡易的なデータ送受信方法

REST APIを使用したWordPress間の簡易的なデータ送受信方法

WordPressのREST APIを使用して、サイト間でデータを簡易的に送受信する方法をご紹介します。受け取り側と送信側の設定手順を解説し、簡単なサンプルコードを掲載しています。

考え方

サイト間でデータをやり取りする際、以下の2つのステップに分けて考えます。

  1. 受け取り側で固定エンドポイントを作成し、データの受信を処理する。
  2. 送信側で受け取り側のエンドポイントにデータを送信する。

受け取り側

受け取り側では、WordPressのREST APIを使ってデータを受け取ります。以下の手順で設定を進めます。

1. エンドポイントの登録

add_action('rest_api_init', function () {
    register_rest_route('custom-api/v1', '/receive-data', [
        'methods' => 'POST',
        'callback' => 'handle_received_data',
        'permission_callback' => '__return_true',
    ]);
});

2. データの受信と一時保存

function handle_received_data($request) {
    $data = $request->get_json_params();
    if (empty($data)) {
        return new WP_Error('no_data', 'データが送信されていません', ['status' => 400]);
    }

    set_transient('temporary_data', $data, 10 * MINUTE_IN_SECONDS);

    return rest_ensure_response(['message' => 'データを受信しました', 'data' => $data]);
}

3. 保存データの取得と表示

add_shortcode('display_transient_data', function () {
    $data = get_transient('temporary_data');
    if (!$data) {
        return '現在、一時保存されているデータはありません。';
    }

    return '<pre>' . print_r($data, true) . '</pre>';
});

このショートコード [display_transient_data] を使用して、一時保存されたデータを表示できます。

送信側

送信側では、WordPressの wp_remote_post 関数を使用してデータを送信します。

1. データ送信のコード作成

function send_data_to_another_site() {
    $endpoint = 'https://example.com/wp-json/custom-api/v1/receive-data';
    $data = [
        'name' => 'テストユーザー',
        'email' => 'test@example.com',
        'message' => 'これはテストメッセージです。',
    ];

    $response = wp_remote_post($endpoint, [
        'method' => 'POST',
        'body' => json_encode($data),
        'headers' => [
            'Content-Type' => 'application/json',
        ],
    ]);

    if (is_wp_error($response)) {
        error_log('データ送信エラー: ' . $response->get_error_message());
    } else {
        error_log('データ送信成功: ' . wp_remote_retrieve_body($response));
    }
}

2. テスト用トリガーの作成

add_action('admin_menu', function () {
    add_menu_page('データ送信テスト', 'データ送信', 'manage_options', 'data-send-test', 'send_test_page');
});

function send_test_page() {
    if (isset($_POST['send_test_data'])) {
        send_data_to_another_site();
        echo '<div class="updated"><p>データを送信しました。</p></div>';
    }

    echo '<form method="post">';
    echo '<input type="hidden" name="send_test_data" value="1">';
    echo '<button type="submit" class="button button-primary">データを送信</button>';
    echo '</form>';
}

注意点

  • set_transient は短期間のキャッシュ用です。データが消える場合があるため、データベース保存も検討してください。
  • セキュリティ強化のため、適切な認証とデータ検証を必ず行ってください。

さいごに

REST APIを使用したWordPress間のデータ送受信は、設定が簡単で柔軟に対応できます。適切なセキュリティ対策を施しつつ、カスタム要件に合わせた拡張を検討してください。

Web制作のご依頼・ご相談など、お気軽にご連絡ください。

お問い合わせ