WordPressはデフォルトではPHPの$_SESSIONを使用しないため、独自にコードを書く必要がある。あくまで一例だが、
add_action('init', function() {
if (!session_id()) {
session_start();
}
});
とし、たとえば独自ログイン処理後に
$_SESSION['my_authenticated_user'] = get_current_user_id();
として、以下のように認証処理を書けばよい。
register_rest_route('custom/v1', '/sample', [
'methods' => 'POST',
'callback' => 'sample_callback',
'permission_callback' => function() {
return isset($_SESSION['my_authenticated_user']) && $_SESSION['my_authenticated_user'] > 0;
}
]);
PHPセッションもクッキー(PHPSESSID)で管理されるため、JavaScript Fetch APIでのリクエストには必ず「credentials: ‘include’」を付与する。
fetch('https://api.example.com/wp-json/custom/v1/sample', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
credentials: 'include',
body: JSON.stringify({ ~ }),
});
独自のPHPセッションはスケーラビリティに課題(たとえば複数サーバー間のセッション共有問題)などがあるため、導入の際はよく検討する。