REST APIを使用したWordPress間の簡易的なデータ送受信方法
WordPressのREST APIを使用して、サイト間でデータを簡易的に送受信する方法をご紹介します。受け取り側と送信側の設定手順を解説し、簡単なサンプルコードを掲載しています。
考え方
サイト間でデータをやり取りする際、以下の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間のデータ送受信は、設定が簡単で柔軟に対応できます。適切なセキュリティ対策を施しつつ、カスタム要件に合わせた拡張を検討してください。