ワードプレス5以降でワードプレスのダッシュボードにサイトの状態を自動で検査してエラー等を表示するサイトヘルスという機能が追加されました。サイトヘルスステータス で「アクティブな PHP セッションを検出」、「サイトでループバックリクエストが完了できませんでした」とエラーが表示される場合の対処方法をご紹介します。


アクティブな PHP セッションを検出、REST API でエラーが発生しました、サイトでループバックリクエストが完了できませんでした は一つの問題で3つエラーが出ている可能性が高いです

ワードプレスの5.X以降では、ワードプレスでセッション(ユーザーの個別履歴等を一時的に保存する仕組み)をプラグインやテーマのプログラムで作成すると上記3つのエラーが出てしまうようになりました。

例として下記のようなプログラムでsession_start()という関数を使うとサイトヘルスステータスにエラーが発生します。

function register_my_session()
{
  if( !session_id() )
  {
    session_start();
  }
}
add_action('init', 'register_my_session');

これはワードプレスが独自のセッションを作る前にプラグインやテーマでセッションを作るとワードプレスの本来の処理を邪魔してしまう可能性があるということになり、サイトヘルスにエラーを出力します。
ただ、弊社が調べた限りでは致命的な動作不全等は起こらないようには見受けられます。

対処方法1 テーマやプラグインをアップデートする

上記のような過去は特に問題なく仕えていた処理がテーマやプラグインに含まれている場合は、既に問題が解決されている可能性がありますのでテーマやプラグインを最新バージョンにアップデートすることによりエラーが解消される事がございます。

対処方法2 プログラムを修正しセッションを張るタイミングを遅らせる

セッションを張るタイミングを、add_action(‘init’ より後にするように修正することでサイトヘルスにエラーが出なくなります。

修正例

function register_my_session()
{
  if( !session_id() )
  {
    session_start();
  }
}
add_action('send_headers', 'register_my_session');

send_headers アクションはワードプレスがヘッダーを定義した直後に実行される関数ですのでワードプレスの張るセッションを阻害する可能性がないためサイトヘルスではエラーが出ません。

参考 アクションの順番
.
.
.
wp_loaded WordPress が完全に読み込まれた後
↓このアクション以降だとエラーが出ない
parse_request リクエスト処理を変更できるようにする (参照配列)
send_headers ヘッダーを変更できるようにする (参照配列)
parse_query クエリ変数が設定された後 (参照配列)
pre_get_posts クエリが実行される前にクエリ変数オブジェクトを露出する (参照配列) 。
posts_selection
wp WP オブジェクトが設定された後 (参照配列)
template_redirect
get_header
.
.
.

対処方法3 都度セッションを張る

そのほかAdmin Ajaxなどのバックエンドの関数では、上記の方法ではセッションが張られないこともございますのでセッションを利用する直前にセッションを作る関数を作成します。

if( !session_id() ){session_start();}
//セッションを利用
$_SESSION["favcolor"] = "green";

※エラーが出る場合は、既にセッションが張られているということですので、対処方法2と併用されていれば特にセッションを新規に張る必要はありません。

WordPress ワードプレスのテーマのカスタマイズ、修正、エラーの解消はワードプレスドクターまでお気軽にご相談ご依頼ください