タグアーカイブ WordPress

WooCommerce 11.2.1リリース。住所フィールドと郵便番号の不具合を修正

WooCommerce 11.2.1リリース。住所フィールドと郵便番号の不具合を修正

WooCommerce 11.2.1が2026年10月9日にリリースされた。今回のドットリリースは、11.2.0で発生した2件のチェックアウト関連バグを修正する内容だ。

住所フィールドを削除したストアで発生するエラーと、アルゼンチンなど特定の国で郵便番号が拒否される問題が対象になる。セキュリティ更新とデータベース更新は含まれない。

記事を読めば、修正された2つのバグの内容と、アップデート前に確認すべきポイントがわかる。

WooCommerce 11.2.1の概要

WooCommerce 11.2.1の概要

WooCommerceはWordPressでECサイトを構築する無料プラグインだ。今回の11.2.1は「ドットリリース」と呼ばれる、バグ修正に限定された小規模な更新になる。新機能の追加はなく、11.2.0で見つかった不具合を修正するためにリリースされた。

修正対象は2件ある。1件目はクラシックチェックアウトで住所フィールドを削除したストアに発生するブロックエラーで、2件目はチェックアウトブロックでアルゼンチンなどの郵便番号が拒否される問題だ。

WooCommerceのチェックアウトには大きく分けて2つの方式がある。1つはショートコードで表示する「クラシックチェックアウト」、もう1つはGutenbergブロックエディタで構築された「チェックアウトブロック」だ。今回の修正は両方を1つずつカバーしている。

WooCommerce 11.2.1の修正対象
修正1 クラシックチェックアウトの住所フィールド削除問題
修正2 チェックアウトブロックの郵便番号バリデーション
セキュリティ更新は含まれない。データベース更新も含まれない。

このデモは、11.2.1で修正された2つの不具合と、セキュリティ更新やデータベース更新が含まれないことを示している。

クラシックチェックアウトの住所フィールド修正

クラシックチェックアウトの住所フィールド修正

クラシックチェックアウトは、ショートコード [woocommerce_checkout] で表示される従来型のチェックアウト画面だ。WooCommerceの初期から提供されている方式で、現在も多くのストアで使われている。

住所フィールドとは、請求先住所や配送先住所の入力欄のことだ。多くのストアでは必須項目だが、デジタル商品のみを販売するストアなどでは不要な場合がある。そうしたストアは、woocommerce_billing_fields または woocommerce_default_address_fields というフィルターを使って住所フィールドを削除するカスタマイズを行う。

フィルターとは、WordPressやWooCommerceの動作をサイト独自に変更するための仕組みだ。テーマのfunctions.phpやカスタムプラグインにコードを追加して使う。住所フィールドを削除するカスタマイズは、決して珍しいものではない。

11.2.0では、注文サマリーが更新される際の住所データ送信に問題があった。住所フィールドを削除したストアで、以下のような不具合が発生する可能性があった。

  • 「続行するには住所を入力してください」というエラーでチェックアウトがブロックされる
  • 税金が正しく計算されない
  • 配送方法の選択肢が表示されなくなる

11.2.1では、11.1の動作に戻す修正が入った。注文サマリーのリフレッシュ時に、住所データが正しく送信されるようになる。住所フィールドを削除するカスタマイズを利用しているストアは、このバージョンで問題が解消される。

11.2.0(住所フィールド削除時)
⚠ チェックアウトエラーが発生
「続行するには住所を入力してください」
税金が計算されない、配送方法が消える
↓
11.2.1(住所フィールド削除時)
✓ チェックアウトが正常に進む
エラーメッセージは表示されない
税金・配送方法も正しく表示される

住所フィールドを削除したストアでは、11.2.0のエラーが11.2.1で解消される。

チェックアウトブロックの郵便番号バリデーション修正

チェックアウトブロックの郵便番号バリデーション修正

チェックアウトブロックは、ブロックエディタで構築された新しいチェックアウトフローだ。カートブロックやチェックアウトブロックなど、複数のブロックを組み合わせて柔軟にレイアウトを変更できる。

バリデーションとは、入力された値が正しい形式かどうかを検証する仕組みだ。たとえば郵便番号の入力欄に「123」など桁数の少ない値を入力するとエラーになるのは、バリデーションが働いているからだ。今回の問題は、この検証が厳しくなりすぎたことによって発生した。

11.2.0では、アルゼンチンの郵便番号で州文字なしの形式(例 1213)が拒否されるようになった。さらに、エルサルバドル、セントビンセントおよびグレナディーン諸島、イギリス領ヴァージン諸島の郵便番号フォーマットも拒否されていた。

11.2.1では、アルゼンチンの州文字なし郵便番号を再び受け入れ、上記3カ国のフォーマットにも対応する。該当する国への配送を行っているストアは、チェックアウトブロックでエラーが解消される。

11.2.0(チェックアウトブロック)
✗ アルゼンチン「1213」は拒否される
州文字なしの郵便番号はエラーになる
↓
11.2.1(チェックアウトブロック)
✓ アルゼンチン「1213」を受け入れる
州文字なしの形式を再サポート

11.2.1では、アルゼンチンの州文字なし郵便番号が再び有効になる。

アップデート前の確認ポイント

アップデート前の確認ポイント

今回の修正はバグ修正に限定されているため、更新によるリスクは比較的低い。ただし、チェックアウトは売上に直結する機能だ。更新前には以下のポイントを確認しておきたい。

  • 住所フィールドを削除するカスタマイズを使っているか
  • チェックアウトブロックを利用しており、対象国に配送しているか
  • ステージング環境で実際のチェックアウトフローをテストしたか
  • 更新前にバックアップを取得しているか

特に住所フィールドを削除するカスタマイズを使っているストアは、11.2.0をスキップして11.2.1に直接更新することをおすすめする。11.2.0に更新してしまった場合は、できるだけ早く11.2.1への更新が望ましい。

この記事のポイント

  • WooCommerce 11.2.1は2026年10月9日にリリースされたドットリリース
  • クラシックチェックアウトで住所フィールドを削除したストアのエラーを修正
  • チェックアウトブロックでアルゼンチンなどの郵便番号バリデーションを修正
  • セキュリティ更新とデータベース更新は含まれない
  • 住所フィールド削除カスタマイズ利用中のストアは更新推奨
WordPressからS3アップロードが失敗する署名エラーの直し方

WordPressからS3アップロードが失敗する署名エラーの直し方

WordPressのプラグインや自作コードからAWS S3へファイルをアップロードすると「SignatureDoesNotMatch」というエラーで失敗する場合、シグネチャ生成後にヘッダー名の大文字小文字が入れ替わっていることが代表的な原因だ。署名の計算時とリクエスト送信時でヘッダー名を完全に一致させると、この問題は解決する。

S3アップロードの署名エラーは何が起きているのか

S3アップロードの署名エラーは何が起きているのか

AWS S3に対してファイルを直接アップロードする場合、多くのWordPressプラグインは「Presigned URL」や「署名付きリクエスト」を使う。これは、アクセスキーを直接ブラウザに渡さず、署名入りのURLやHTTPヘッダーを生成してアップロードを許可する仕組みだ。静的にサイトを書き出すプラグイン「Static Porter」もこの方式を採用している。

署名付きリクエストでは、リクエストの一部をSHA256でハッシュ化し、そのハッシュ値をシークレットキーで暗号化して「シグネチャ」を作る。S3側は同じ計算を再現し、シグネチャが一致するかどうかで正当性を検証する。ここで気をつけたいのは、署名の計算対象にHTTPヘッダー名も含まれる点だ。

つまり、署名を計算した時点で「content-type」という小文字のヘッダー名を使っていたのに、送信する直前に「Content-Type」と大文字に変更してしまうと、S3側の署名検証が失敗する。これが今回のエラーの正体だ。

Content-Typeの大文字小文字が署名を無効にする仕組み

Content-Typeの大文字小文字が署名を無効にする仕組み

AWSのSignature V4(署名バージョン4)では、署名の計算対象となる正規リクエストを作る際、ヘッダー名はそのままの文字列として扱われる。HTTPヘッダー名は本来大文字小文字を区別しないとされているが、署名計算の世界では「文字列として完全に一致していること」が要求される。

ここで問題になるのが、PHPの配列キーの扱いだ。PHPの連想配列はキーの大文字小文字を厳密に区別するため、「content-type」と「Content-Type」は別物として扱われる。署名を計算する関数に小文字の「content-type」を渡した後、別の場所で大文字の「Content-Type」を代入すると、配列には両方のキーが存在する状態になる。

wp_remote_requestがヘッダーを送信する際、どちらのキーが優先されるかは実装次第だ。しかし重要なのは、シグネチャの計算対象になったヘッダー名と、実際に送信されるヘッダー名が一致しなくなる点にある。S3はこの不一致を「署名が無効」と判定する。

Before(エラー)
シグネチャ生成時 → content-type を署名
送信直前 → Content-Type に上書き
S3検証 → 署名不一致で403エラー
↓
After(修正後)
シグネチャ生成時 → content-type を署名
送信直前 → content-type のまま変更なし
S3検証 → 署名一致でアップロード成功
■ エラー状態 ■ 修正後

上図の通り、シグネチャ生成時と送信時でヘッダー名の表記を揃えるだけで、署名検証のエラーは解消する。

署名エラーを直す具体的な修正手順

署名エラーを直す具体的な修正手順

Static Porterのようにプラグイン内部のコードに起因する場合は、プラグインの更新で修正されるのを待つ以外にも、一時的なパッチを当てる方法がある。次の手順で問題箇所を特定し、修正する。

STEP 1 シグネチャ生成関数への引数を確認する
↓
STEP 2 送信前のヘッダー上書き処理を探す
↓
STEP 3 ヘッダー名の大文字小文字を署名側に合わせる
↓
STEP 4 キャッシュをクリアして再テストする

Static Porterの場合、問題が起きる箇所はプラグインのメインPHPファイル内で、MIMEタイプを推測した後にヘッダーを上書きしている行だ。

シグネチャ生成に渡したヘッダー配列を特定する

まず、プラグインのソースコードを開き、AWSの署名を計算している関数呼び出しを探す。Static Porterでは「static_porter_aws_sigv4」という関数だ。この関数に渡しているヘッダー配列には、小文字の「content-type」がキーとして含まれている。

署名の計算はこの配列を受け取った時点の内容で行われる。ここでのキー名を記憶しておくことが修正の基準になる。

送信前のヘッダー上書き処理を探す

署名を計算した後、wp_remote_requestに渡す直前に、ヘッダー配列へ新しい値を代入している行がないか確認する。今回のケースでは、次のようなコードが問題になる。

// 修正前のコード
$content_type = static_porter_guess_mime($file_path);
$headers = static_porter_aws_sigv4('PUT', $host, $uri, $region, 's3', $body, [
    'content-type' => $content_type,
], $access_key, $secret_key);
$headers['Content-Type'] = $content_type; // ← ここで大文字キーが追加され署名と食い違う
$response = wp_remote_request('https://' . $host . $uri, [
    'method'  => 'PUT',
    'headers' => $headers,
    'body'    => $body,
    'timeout' => 60,
]);

シグネチャ生成時には小文字の「content-type」を渡しているのに、その直後に大文字の「Content-Type」という別キーを代入している。これが署名不一致の直接の原因だ。

ヘッダー名のケースを署名側に合わせる

最も確実な修正は、シグネチャ生成時のヘッダー名と送信時のヘッダー名を完全に一致させることだ。今回のケースでは、シグネチャ生成時に小文字を使っているため、後から大文字キーを代入している行をコメントアウトするだけで解決する。

// 修正後のコード
$content_type = static_porter_guess_mime($file_path);
$headers = static_porter_aws_sigv4('PUT', $host, $uri, $region, 's3', $body, [
    'content-type' => $content_type,
], $access_key, $secret_key);
// $headers['Content-Type'] = $content_type; // コメントアウトして小文字のまま送信する
$response = wp_remote_request('https://' . $host . $uri, [
    'method'  => 'PUT',
    'headers' => $headers,
    'body'    => $body,
    'timeout' => 60,
]);

あるいは逆に、シグネチャ生成時のキーを大文字の「Content-Type」に統一し、後からの代入を削除する方法もある。どちらにせよ、署名を計算した時点と送信時点で同じヘッダー名を使うことが本質だ。

キャッシュをクリアして再テストする

コードを修正したら、WordPressのキャッシュプラグインやオブジェクトキャッシュをクリアし、実際にS3へのアップロードを実行して確認する。アップロード処理に署名済みURLがキャッシュされる仕組みがある場合は、古い署名が残っていないことも確認しておく。

プラグイン本体の編集は子テーマや別プラグインで安全に行う

プラグイン本体のPHPファイルを直接編集すると、プラグインのアップデート時に修正が上書きされて消える。長期的には、プラグイン開発者へバグ報告を出し、公式のアップデートで修正されるのを待つのが妥当だ。

どうしても動かす必要がある場合は、プラグインのコードを直接修正した上で、変更内容を記録しておくか、mu-plugin(Must Use Plugin)で代替処理を差し込む方法を検討する。

自作コードでS3署名を使う場合の落とし穴

自作コードでS3署名を使う場合の落とし穴

プラグイン任せにせず、自前のPHPコードでS3への署名付きアップロードを実装している場合、同じような問題がいくつか潜んでいる。ここでは署名検証が失敗する主なパターンを整理する。

ホスト名とURIの不一致

シグネチャの計算対象には、エンドポイントのホスト名とパス(URI)が含まれる。バケット名のリージョン表記や、URLエンコードの有無、末尾のスラッシュの扱いが違うだけで署名は別物になる。署名を作る関数と実際にリクエストを送るURLが完全に一致しているか確認する。

ボディの変更によるシグネチャ崩れ

S3のPUTリクエストでは、アップロードするファイルのバイナリデータをそのままボディとして署名に含める。署名を計算した後に、余計な空白や改行、文字コード変換が入るとボディが変化し、署名検証に失敗する。ファイルはバイナリのまま扱い、加工しないことが基本だ。

タイムスタンプのスキュー

Signature V4は、リクエスト日時を署名に含める。サーバーのシステムクロックが大幅にずれていると、S3側が「リクエストが古すぎる」と判断して拒否する。エラーメッセージに時刻に関する記述がある場合は、サーバーの時刻同期(NTP)を確認する。

よくある質問

S3の署名エラーとアクセス権限エラーの違いは何か

署名エラーは「SignatureDoesNotMatch」や「The request signature we calculated does not match」と表示され、リクエスト内容が署名と食い違っていることを示す。一方、権限エラーは「AccessDenied」や「403 Forbidden」の形で、署名自体は正しいがIAMポリシーで操作が許可されていないことを示す。エラーコードを見分けることが切り分けの第一歩だ。

プラグインをアップデートしたらS3アップロードが壊れた場合はどうするか

プラグインのアップデートで内部実装が変わった可能性が高い。まずはプラグインの変更履歴(チャンジログ)を確認し、S3関連の修正が入っているか調べる。問題が再現するなら、1つ前のバージョンへ戻して切り分けるのが確実だ。プラグインのフォーラムやGitHubリポジトリで同様の報告が上がっていないかも確認する。

PHPのHTTPヘッダー名は大文字小文字を区別するのか

HTTPの仕様上、ヘッダー名は本来大文字小文字を区別しない。だが、AWSの署名計算は「文字列としての完全一致」を要求するため、区別される。PHPの配列キーも「content-type」と「Content-Type」は別物として扱われる。この2つの事情が重なって問題が起きる。

wp_remote_requestのheaders配列で小文字を使っても動作するのか

WordPressのHTTP APIはHTTPヘッダー名の大文字小文字をある程度正規化する。しかし、S3への署名付きリクエストでは、署名計算時のヘッダー名と食い違うと検証に失敗する。小文字で署名したなら小文字のまま渡すのが安全だ。

AWS SDKを直接使うほうが安全なのか

AWS SDK for PHPを使えば、シグネチャ生成と送信の整合性をライブラリが保証するため、今回のような手動ミスは起きにくい。ただし、SDKを導入すると依存関係が増え、WordPressとの相性も考える必要がある。小規模なアップロード機能なら、シグネチャ生成を手動で実装しつつ、ヘッダー名の一致を徹底する方がシンプルな場合もある。

この記事のポイント

  • S3の署名エラーはヘッダー名の大文字小文字不一致が原因になりやすい
  • シグネチャ生成時と送信時でヘッダー名を完全に一致させる
  • 問題のある代入行をコメントアウトするだけで多くの場合解決する
  • プラグイン本体の直接編集はアップデートで消えるため要注意
  • 自作コードではホスト名やボディ、時刻ずれにも気をつける
TablePress 3.4更新後にテーブルが表示されない時の原因と安全な復旧手順

TablePress 3.4更新後にテーブルが表示されない時の原因と安全な復旧手順

TablePress 3.4に更新した後にテーブルがショートコード [table id=28 /] のまま表示されない場合、まずプラグインが停止しているか、ショートコードの処理が途中で失敗しているかを確認する。サイト内検索まで動作しなくなったケースでは、古いテーブルデータの保存形式に不整合が起きている可能性が高いが、バックアップを取ればデータを失わずに復旧できる。

TablePress 3.4への更新後にテーブルが表示されない原因

TablePress 3.4への更新後にテーブルが表示されない原因

TablePress は、投稿や固定ページに書かれた [table id=28 /] というショートコードを、実際の表の HTML に置き換えて表示する仕組みになっている。プラグインが無効化されていたり、更新の途中で停止していたりすると、この置き換えが行われず、ショートコードがそのまま画面に出る。

更新後 TablePress 3.4 に更新した状態
ページに [table id=28 /] と表示される
↓
原因 プラグイン停止でショートコード未処理
ショートコードは TablePress が処理して初めて表になる
■ 症状 ■ 原因

更新直後にショートコードだけが見える症状と、プラグイン停止という原因の関係を表したものだ。停止が原因なら再有効化だけで表は戻る。

ショートコードがそのまま表示される仕組み

ショートコードは、WordPress のプラグインがページ表示のタイミングで処理する仮の置き場だ。TablePress が有効な状態なら表に変換されるが、無効になると [table id=28 /] という文字列が読者に見えてしまう。更新後にこの症状が出た場合は、更新処理が最後まで完了せずプラグインが自動で停止したケースが多い。

更新後にプラグインが自動で停止していないか確認する

WordPress の管理画面で「プラグイン」メニューを開き、TablePress の状態を確認する。「有効化」ボタンが表示されていれば、更新後に何らかの理由で停止している。まず一時的に有効化し、テストページで表が表示されるか、サイト内検索が動くかを順に確かめる。

なぜ更新後にサイト内検索が動かなくなったのか

なぜ更新後にサイト内検索が動かなくなったのか

TablePress のデータは、WordPress の投稿と同じデータベースの wp_posts テーブルに保存されている。テーブル本体は JSON という書式で格納されるため、3.4 更新後に古い形式のデータを読み込む処理が変わると、サイト全体の投稿一覧や検索クエリにエラーを引き起こすことがある。特に公開サイトの検索フォームが正常に動作しなくなる症状が報告されている。

古いテーブルデータの保存形式と不整合のリスク

長年運用してきたサイトでは、TablePress が過去に保存したテーブルデータが現在の期待する形式と異なる場合がある。3.4 ではテーブルの読み込み処理が更新されたため、旧形式のデータをそのまま読み込むと PHP の警告や致命的エラーが発生し、結果として検索機能まで落ちることがある。

検索が壊れたときはプラグイン切り分けで特定する

TablePress を無効化して検索が復活したなら、原因は TablePress 側にある可能性が高い。より正確に切り分けるには、TablePress を有効化したままテーブルを1つずつ再保存し、どのテーブルで検索が止まるかを調べる。これにより、データの破損箇所を特定できる。

バックアップを取ったうえで安全に復旧する手順

バックアップを取ったうえで安全に復旧する手順

復旧作業は、必ず現状のバックアップを確認してから進める。ショートコードが表示されたままの公開ページを放置せず、次の手順で原因の切り分けと復旧を行う。

STEP 1 UpdraftPlus などでバックアップがあることを確認する
↓
STEP 2 プラグイン画面で TablePress が無効なら再有効化する
↓
STEP 3 テストページでテーブル表示を確認する
↓
STEP 4 古いテーブルを1つずつ再保存する
↓
STEP 5 検索とキャッシュを再確認する

復旧の作業は5段階で進める。いきなり全テーブルを変更せず、表示と検索を細かく確認しながら原因を絞り込むのが安全だ。

復旧前に実施するバックアップの確認

UpdraftPlus のようなバックアッププラグインで、サイト全体とデータベースのバックアップが最新であることを確認する。バックアップの復元方法も1度確認しておくと、万が一テーブルデータを誤って書き換えても元に戻せる。

プラグインの再有効化と表示確認

プラグイン画面で TablePress を有効化し、問題が出ているページを1つだけ開いて表が表示されるか確認する。このときサイト全体のキャッシュが残っていると古い画面が見えるため、シークレットウィンドウや別ブラウザで確認すると正確だ。

古いテーブルを1つずつ再保存して切り分ける

TablePress の管理画面で「テーブル一覧」を開き、公開している各テーブルを編集画面で開いて「変更を保存」を押す。再保存で現在の形式にデータが整い、古い形式に起因するエラーが解消されることが多い。1つ保存するたびに検索が動くかを確認すれば、問題のあるテーブルを特定できる。

ブラウザとサイトのキャッシュを削除して再確認

再保存後も症状が続く場合は、WordPress のキャッシュ系プラグインやサーバー側のキャッシュを削除し、ブラウザのキャッシュもクリアする。キャッシュが残ったままだと、修正後の状態を確認できない。

古いテーブルデータの不整合を調べて修正する方法

古いテーブルデータの不整合を調べて修正する方法

古いテーブルデータの不整合が原因で検索まで壊れた場合は、テーブルを再保存するだけでなく、データの中身を直接確認する方法も有効だ。焦らず1つずつ確認すれば、過去の歴史データを失わずに済む。

どのテーブルが古い形式かを特定する方法

TablePress のテーブル一覧で、更新日時が古いテーブルや、長期間編集していないテーブルを優先して確認する。古い形式のデータは、特に大量の行を持つテーブルで問題を起こしやすい。まず行数の多いテーブルから再保存を試す。

JSONデータの破損を修復する手順

TablePress のテーブルは JSON 形式でデータベースに保存されている。破損が疑われる場合は、TablePress の「エクスポート」機能で CSV として書き出し、内容を確認してから新しいテーブルとして読み込む。これにより JSON の構造が新しく作り直され、破損が解消される。

エクスポートと再インポートでデータを整える

元テーブルをエクスポートして CSV を保存し、TablePress の「インポート」で新しいテーブルとして取り込む。取り込み後にショートコードの ID が変わらないよう、元のテーブルを削除して同じ ID に割り当てるか、元テーブルを編集して CSV を貼り直す。ID を変えたくない場合は、テーブル編集画面で内容を丸ごと貼り直すのが安全だ。

旧バージョンへ戻す一時的な対処と再更新の判断

旧バージョンへ戻す一時的な対処と再更新の判断

場合によっては、TablePress 3.4 自体の不具合が原因で、データを整えても検索や表示が直らないことがある。その場合は旧バージョンへ戻して一時的に安定させ、修正版のリリースを待つのが現実的な選択になる。

旧バージョンを入手して手動で戻す手順

WordPress.org の TablePress プラグインページにある「詳細を表示」から過去のバージョンを取得する。管理画面の「プラグイン > 新規追加 > プラグインのアップロード」で旧バージョンの ZIP をアップロードすると、現在のバージョンを上書きして戻せる。アップロード前には必ずバックアップを取り直す。

ロールバック後に再度更新するタイミング

旧バージョンへ戻したら、WordPress の更新通知で TablePress 3.4 の修正版が出るまで自動更新を止めておくことも検討する。修正版が公開されたら、テスト環境か深夜の時間帯で更新し、表示と検索を再確認してから本番に適用する。

よくある質問

TablePress を再有効化したら検索が再び壊れるのでは?

まずテーブルを1つずつ再保存してから検索を確認すれば、問題のあるテーブルだけを特定できる。再保存後も検索が壊れるなら、旧バージョンへ戻すか、プラグインの修正版を待つ。バックアップがあれば元に戻せるため、慌てて全データを消す必要はない。

古いテーブルだけが表示されないのはなぜか

古いテーブルはデータの保存形式が現在の TablePress と一致していない場合がある。編集画面で開いて保存し直すと現在の形式に変換され、表示されるようになることが多い。

TablePress を無効化したままでもデータは消えないか

プラグインを無効化しても、テーブルのデータはデータベースに残る。プラグインを削除しない限り過去のデータは保持される。ただし安全のため、無効化中もバックアップを取っておく。

ショートコードが表示されたまま放置するリスクは?

訪問者に [table id=28 /] という文字列が見え続けると、サイトの信頼性が下がる。検索エンジンのクローラーも表の内容を取得できないため、早めに再有効化か代替表示へ切り替える。

キャッシュ系プラグインを使っている場合の注意点は?

修正後も古い画面が表示され続ける場合は、キャッシュ系プラグインの全キャッシュ削除とブラウザのキャッシュクリアを行う。サーバー側のキャッシュが残っていることもあるため、ホスティングの管理画面も確認する。

この記事のポイント

  • 更新後にショートコードが見えるのはプラグイン停止が主な原因
  • まずバックアップを確認し、それから再有効化する
  • 検索が壊れた場合は古いテーブルデータの不整合を疑う
  • テーブルを1つずつ再保存して問題箇所を特定する
  • 直らないときは旧バージョンへ戻して修正版を待つ
セキュリティプラグインがテーマファイルを隔離してサイトが表示されない時の復旧手順

セキュリティプラグインがテーマファイルを隔離してサイトが表示されない時の復旧手順

セキュリティプラグインが BeTheme の必須ファイルを誤検知して隔離し、WordPress サイトが表示されなくなった場合、まず隔離画面から「復元」を実行し、失敗したら FTP やバックアップから theme-shortcodes.php を戻す。その後キャッシュを削除してテーマが有効であることを確認すれば、サイトは復旧する。

なぜテーマファイルの隔離でサイト全体が表示されなくなるのか

なぜテーマファイルの隔離でサイト全体が表示されなくなるのか

WordPress はアクセスがあるたびに、有効化しているテーマの functions.php と、そのテーマが読み込む必須ファイルを実行する。BeTheme の場合、テーマ本体が theme-shortcodes.php を include して短コードの定義などを登録している。このファイルが隔離で消えると、PHP の致命的エラーが発生してページ全体が止まる。

セキュリティプラグインの隔離機能は、怪しいと判定したファイルを元の場所から移動するか、拡張子を変えて読み込めない状態にする。マルウェア対策としては有効だが、正規のテーマファイルを誤検知すると、テーマごと起動できなくなる。同様のことはテーマだけでなく、プラグインの必須ファイルでも起こる。

その結果、画面には「このサイトで重大なエラーが発生しました」という趣旨のエラーが表示されるか、真っ白な画面になる。管理画面にも入れないケースが多いため、復旧はサーバー側からの操作が中心になる。

正常な状態

WordPress が BeTheme の functions から theme-shortcodes.php を読み込み、サイトが表示される

↓
隔離された状態

theme-shortcodes.php が見つからず PHP の致命的エラーになる。サイトは「重大なエラー」で表示不可

■ 正常時 ■ 隔離後

テーマ必須ファイルの隔離前と隔離後の状態の違いを示す。

隔離されたファイルを復元する2つの方法

隔離されたファイルを復元する2つの方法

隔離されたテーマファイルの復元は、セキュリティプラグインの管理画面から試す方法と、FTP やバックアップから直接戻す方法の 2 通りある。まず隔離画面から復元し、エラーになる場合は後者を使う。

STEP 1 隔離画面から「復元」を実行する
↓
STEP 2 失敗したら FTP で theme-shortcodes.php を戻す
↓
STEP 3 管理画面・プラグイン・ブラウザのキャッシュを削除する
↓
STEP 4 テーマが有効かを確認し、必要なら再度有効化する

ファイル復旧からサイト表示確認までの全体の流れを 4 ステップで示す。

セキュリティプラグインの隔離画面から復元する

CleanTalk のセキュリティ機能では、管理画面のセキュリティメニューから隔離タブを開くと、隔離したファイルの一覧が表示される。各ファイルには「復元」または「Restore」ボタンがあるので、該当の theme-shortcodes.php を選んで復元を実行する。

復元に失敗し「エラーが発生しました」「テクニカルサポートに連絡してください」という趣旨の表示が出る場合、プラグイン側でファイルを書き戻す権限が足りないか、隔離時のコピーが壊れている可能性がある。この状態ではプラグイン画面からの復元はあきらめ、次の方法に移るのが早い。

FTP やバックアップから対象ファイルを直接戻す

FTP クライアントでサーバーに接続し、/wp-content/themes/betheme/functions/ ディレクトリを開く。theme-shortcodes.php が存在しないか、拡張子が .quarantine や .bak のように変わっていないかを確認する。ファイルが残っているのに WordPress が読み込めない場合は、正規のバックアップから同じファイルを上書きアップロードする。

バックアップがない場合は、公式の配布元から BeTheme の同じバージョンの zip を入手し、functions フォルダだけをアップロードする。テーマ全体を上書きしても問題はないが、親テーマの functions.php に直接コードを追記していた場合は消えるため、事前にバックアップを取っておく。子テーマを使っていればカスタマイズは残る。

ファイルを復元してもサイトが表示されない時の確認手順

ファイルを復元してもサイトが表示されない時の確認手順

ファイルの復元が終わってもサイトが真っ白なまま、またはエラーが続く場合、残っているキャッシュやテーマの有効状態、ファイル権限が原因になっていることが多い。次の順で確認する。

キャッシュをすべて削除する

ブラウザのキャッシュに加えて、WordPress のキャッシュプラグイン、サーバー側のキャッシュ、CDN のキャッシュをすべてクリアする。復元したファイルが正しくても、キャッシュに残ったエラーページや読み込み失敗の状態が配信され続けると、ブラウザではサイトが壊れたままに見える。

キャッシュプラグインが管理画面から操作できない場合は、wp-content/cache/ ディレクトリの中身を FTP で削除する。サーバー側のキャッシュはコントロールパネルからクリアし、CDN を使っている場合は配信側のキャッシュ削除も必要になる。

テーマが有効なままかを確認する

WordPress はアクティブなテーマの必須ファイルが読み込めないと、テーマを無効化して標準テーマにフォールバックすることがある。管理画面の「外観」から「テーマ」を開き、BeTheme がアクティブのままか確認する。別のテーマになっていれば BeTheme を再度有効化する。

wp-content/themes/ 配下のフォルダ名がリネームされている場合も同じ事象が起こる。隔離機能がファイルを移動したのか、フォルダ名を変えたのかはサーバー側で確認する。フォルダ名が変わっていれば正しい名前に戻す。

ファイルの権限と所有者を確認する

FTP で復元したファイルのパーミッションが適切でないと、WordPress が読み込めないことがある。PHP ファイルの権限は一般的に 644、ディレクトリは 755 に設定する。レンタルサーバーの場合、ファイルの所有者が FTP ユーザーとウェブサーバープロセスで異なると読み込みに失敗するため、サーバーのコントロールパネルで所有者も確認する。

エラーログで失敗原因を特定する

それでも復旧しない場合は、サーバーのエラーログを見て PHP がどのファイルの読み込みに失敗しているかを特定する。wp-config.php にデバッグ設定を追加してエラーをログに出力させると、どの行で止まっているかが確認できる。

define('WP_DEBUG', true);
define('WP_DEBUG_LOG', true);
define('WP_DEBUG_DISPLAY', false);

誤検知を防いで再発させないための設定

誤検知を防いで再発させないための設定

正規のテーマやプラグインが隔離される事故を防ぐには、信頼できるファイルをスキャンの除外リストに登録し、バックアップ体制を整えておく。誤検知は一度きりとは限らないため、同じファイルが再度隔離される可能性も考えておく。

誤検知したファイルをスキャン対象から除外する

CleanTalk のセキュリティ機能を使っている場合、誤検知したファイルをスキャンのホワイトリストに追加できる。管理画面のセキュリティ設定から「除外」または「無視リスト」を開き、隔離されたファイルのパスを登録する。テーマ全体を除外するとセキュリティの効果が薄れるため、対象ファイルだけを追加するのが基本だ。

テーマとプラグインは公式の配布元から入手して更新する

マーケットや公式ディレクトリ以外から入手したテーマには、改ざんされたファイルが含まれていることがある。BeTheme は公式の配布元からのダウンロードに限定し、アップデートが配信されたらすぐに適用する。正規のファイルが最新の状態なら、セキュリティスキャナーが誤検知する確率も下がる。

復旧に使えるバックアップを毎日残す

誤検知でサイトが落ちた場合、最短の復旧手段はバックアップからのファイル復元だ。レンタルサーバーの自動バックアップに加えて、WordPress のバックアッププラグインで週 1 回以上のフルバックアップを取っておく。バックアップの保存先はサーバー内だけでなく、外部ストレージにも残すとより安全だ。

よくある質問

セキュリティプラグインがテーマファイルを隔離するのはなぜ?

マルウェアスキャンがファイルのコードパターンを怪しいと判定したためだ。正規のテーマでも、短コードを定義するコードや eval に似た記述があると誤検知されやすい。BeTheme の theme-shortcodes.php は短コードを大量に登録するファイルで、この種の誤検知が起こりやすい。

隔離解除ボタンを押してもエラーになる理由は?

多くはファイルを書き戻す権限の問題だ。サーバーのディレクトリ権限が狭い、ファイル所有者が違う、隔離時の一時ファイルが壊れているなどの理由が考えられる。この場合 FTP やバックアップから手動で戻すのが確実だ。

FTP が使えないサーバーの場合は?

レンタルサーバーのコントロールパネルにファイルマネージャーがあるなら、それでファイルをアップロードできる。それも難しい場合は、サーバー会社のサポートに連絡し、隔離されたファイルの復元と権限確認を依頼する。

テーマを再インストールするとカスタマイズは消える?

親テーマのファイルを上書きするだけなら、データベースに保存されたカスタマイザー設定は残る。ただし親テーマの functions.php に直接コードを追記していた場合は消えるため、事前にバックアップを必ず取ってから行う。子テーマを使っていれば安全だ。

管理画面にも入れなくなった場合は?

FTP でテーマフォルダの名前を一時的に変えると、WordPress が自動的に標準テーマへ切り替えて管理画面に入れるようになる。その後、正しいファイルを戻してからテーマを再度有効化する。

この記事のポイント

  • セキュリティプラグインの隔離でテーマの必須ファイルが消えるとサイト全体が停止する
  • まず隔離画面から復元し、失敗したら FTP かバックアップで対象ファイルを戻す
  • 復元後はブラウザ・プラグイン・サーバーのキャッシュをすべて削除する
  • テーマが有効なままか、ファイルの権限が正しいかを確認する
  • 誤検知したファイルはスキャンの除外リストに登録して再発を防ぐ
WordPressでwp-adminとwp-login.phpがトップページにリダイレクトされる原因と対処法

WordPressでwp-adminとwp-login.phpがトップページにリダイレクトされる原因と対処法

WordPressでwp-adminやwp-login.phpにアクセスしてもトップページへリダイレクトされる場合、原因はセキュリティプラグインによるログインURLの変更、.htaccessのリダイレクト設定、またはCloudflareのページルールであることが多い。ホスティング管理画面にアクセスできない状態でも、まずは非表示ログインURLの候補を順に試し、解決しなければホスティング会社に所有証明を添えて連絡するのが最も確実な復旧経路だ。

なぜwp-adminとwp-login.phpがトップページへ飛ばされるのか

なぜwp-adminとwp-login.phpがトップページへ飛ばされるのか

ログインページへのアクセスがホームページへリダイレクトされる症状には、いくつか典型的な原因がある。最も多いのがセキュリティプラグインやログインURL変更プラグインによるURLの秘匿化だ。Elementorなどのページビルダーがログインリダイレクトを引き起こすことはほとんどないため、まずはセキュリティ機能まわりを疑う。

セキュリティプラグインによるログインURLの変更

WPS Hide Login、iThemes Security、All In One WP Securityなどのプラグインは、ログインページのURLを任意の文字列に変更できる。デフォルトのwp-login.phpやwp-adminを無効化し、たとえば「/login/」や「/member/」など開発者が設定したURLだけを有効にする。この機能が有効な状態では、元のURLにアクセスするとホームページへリダイレクトされるのが一般的な挙動だ。

.htaccessに記述されたリダイレクトルール

サーバーの.htaccessファイル(Apacheの設定ファイル)に、wp-adminやwp-login.phpを対象にしたリダイレクトルールが記述されているケースもある。セキュリティ対策として意図的に追加された場合と、不正アクセスによる改ざんの両方が考えられる。改ざんの場合は他のファイルにも不正なコードが仕込まれている可能性があるため、注意が必要だ。

CloudflareのページルールやWAF設定

ドメインのネームサーバーがCloudflareに向いている場合、Cloudflare側のページルールやWAF(Webアプリケーションファイアウォール)のカスタムルールがwp-adminやwp-login.phpへのアクセスをブロックまたはリダイレクトしている可能性もある。Cloudflareの管理画面にアクセスできなければこの設定を確認できないため、原因の切り分けが難しくなる。

カスタムコードによるリダイレクト

テーマのfunctions.phpやmu-plugins(マストユースプラグイン、プラグイン画面から無効化できない自動有効プラグイン)に、ログインURLをリダイレクトするカスタムコードが書かれていることもある。制作会社やフリーランスの開発者がセキュリティ目的で追加するケースが多く、ドキュメントが残っていないと原因の特定に時間がかかる。

ホスティングにアクセスできない時にできる確認と対処

ホスティングにアクセスできない時にできる確認と対処

ホスティング管理画面もCloudflareも使えない状況でも、できる確認は残っている。順番に試していくことで、サーバーに触らずにログインできるケースもある。下の図は復旧までの流れをまとめたものだ。

STEP 1 非表示ログインURLの候補を順番に試す
↓
STEP 2 シークレットウィンドウでキャッシュの影響を排除する
↓
STEP 3 検索エンジンのキャッシュから手がかりを探す
↓
STEP 4 ホスティング会社に所有証明を添えて連絡する

ホスティングやCloudflareにアクセスできない状態で行う確認の流れ。非表示URL候補の試行から始め、それで解決しなければホスティング会社への直接連絡に進む。

非表示ログインURLの候補を順番に試す

ログインURL変更プラグインが使われている場合、実際のログインページはデフォルトのwp-adminやwp-login.phpではない。よく使われる候補として「/login/」「/admin/」「/dashboard/」「/member/」「/members/」「/my-account/」「/wp-login.php?redirect_to=/wp-admin/」などがある。サイトのURLの末尾にこれらを付けて、ログイン画面が表示されるかを確認する。

また、サイトのフッターやお問い合わせページにログインリンクが設置されていないかも確認する。リンク先が非表示ログインURLになっていることがある。サイト内検索で「login」「ログイン」という文字列を探すのも有効だ。

シークレットウィンドウでキャッシュとクッキーの影響を排除する

ブラウザのキャッシュやクッキーが原因でリダイレクトが発生している可能性を排除するため、シークレットウィンドウ(プライベートブラウジング)で同じURLにアクセスする。シークレットウィンドウでも同じ症状が出るなら、ブラウザ側のキャッシュではなくサーバー側の設定が原因だと判断できる。

検索エンジンのキャッシュから過去のログインページを探す

GoogleやBingのキャッシュに、過去のログインページのURLが残っていることがある。検索エンジンで「site:example.com ログイン」や「site:example.com wp-admin」のように検索すると、過去にインデックスされたログイン関連ページが見つかる場合がある。キャッシュされたURLが非表示ログインURLの手がかりになる。

ホスティング会社に直接連絡して管理アクセスを取り戻す手順

ホスティング会社に直接連絡して管理アクセスを取り戻す手順

ログインURLの候補を試しても解決せず、開発者にも連絡がつかない場合、ホスティング会社に直接連絡して管理アクセスを取り戻すのが最も確実な方法だ。契約者が誰であっても、所有証明を提示すれば対応を受けられるケースが多い。

所有証明書類を準備する

ホスティング会社に連絡する前に、サイトの所有者であることを証明できる書類を準備する。具体的にはホスティングやドメインの契約時の請求書、支払い明細、クレジットカードの利用履歴、登録メールアドレスに届いた契約確認メールなどだ。ドメインのwhois情報に自分の名前が登録されていれば、それも有力な証明になる。

サポート窓口に状況を正確に伝える

ホスティング会社のサポート窓口(電話、チャット、メールフォーム)に連絡し、次の3点を簡潔に伝える。「サイトのドメイン名」「wp-adminがホームページへリダイレクトされてログインできない状況」「開発者が管理しているため管理画面のログイン情報を持っていないこと」。所有証明を求められたら、準備した書類を提示する。

アクセス回復後に依頼する作業

ホスティング会社から管理画面やFTPのアクセス権を回復したら、次の作業を依頼するか自分で行う。まず.htaccessファイルのバックアップを取り、リダイレクトルールの有無を確認する。次にwp-content/plugins/ディレクトリを一時的に別名にリネームして全プラグインを無効化し、ログインできるか試す。これが原因の切り分けとして最も確実な手順だ。

サーバーアクセスを回復した後に直すべき箇所

サーバーアクセスを回復した後に直すべき箇所

サーバーやFTPにアクセスできるようになったら、原因箇所を特定して修正する。下の図は.htaccessの修正前後のイメージだ。

修正前
.htaccess に wp-admin と wp-login.php をホームへ転送するルールが存在
RewriteRule ^wp-admin$ / [R=301,L]
RewriteRule ^wp-login\.php$ / [R=301,L]
↓
修正後
リダイレクトルールを削除し、ログインページへのアクセスが正常に戻る
# WordPress デフォルトのルールのみ残す
■ エラー状態 ■ 修正後

.htaccessのリダイレクトルールを削除することで、wp-adminとwp-login.phpへのアクセスが正常に戻るイメージ。変更前に必ずファイルのバックアップを取る。

.htaccessを確認してリダイレクト設定を削除する

FTPクライアントやファイルマネージャーでサーバーに接続し、WordPressのルートディレクトリ(通常はpublic_htmlまたはドメイン名のフォルダ)にある.htaccessファイルをダウンロードする。ファイルを開き、wp-adminやwp-login.phpを対象にしたRewriteRule(リライトルール、URL変換の設定)が記述されていないかを確認する。該当する行があれば削除して上書きアップロードする。

セキュリティプラグインを無効化して切り分ける

.htaccessに問題が見つからない場合、FTPでwp-content/plugins/ディレクトリの名前を一時的に変更する(例、plugins → plugins_bak)。これで全プラグインが無効化される。その後wp-adminにアクセスしてログイン画面が表示されるかを確認する。表示されればプラグインが原因だ。プラグインディレクトリを元の名前に戻し、セキュリティ系プラグインを1つずつ無効化しながら原因を特定する。

wp-config.phpとデータベースの設定を確認する

wp-config.phpに、ログインURLを変更する定数(WP_ADMIN_DIRやWP_HOME、WP_SITEURLなど)が追加されていないかも確認する。また、データベースのwp_optionsテーブルにあるsiteurlとhomeの値が実際のサイトURLと一致しているかを確認する。これらが不整合を起こしていると、リダイレクトループが発生することがある。

ログインページが飛ばされないための再発防止策

ログインページが飛ばされないための再発防止策

ログインページにアクセスできなくなる問題は、適切なアクセス管理とドキュメント化で再発を防げる。とくに外部の開発者に管理を委託している場合は、以下の対策を講じておくことが重要だ。

ログインURLの変更内容を記録して共有する

ログインURLを変更するプラグインを使う場合、変更後のURLを必ずドキュメントに記録し、サイト所有者と開発者の両方で共有しておく。パスワード管理ツールにログインURLと資格情報をまとめて保管するのが実用的だ。URL変更の設定をしたこと自体を忘れてしまうと、今回のようにログイン画面へ到達できなくなる。

ホスティングとドメイン管理へのアクセス権を確保する

サイト運営者自身がホスティング管理画面とドメイン管理画面のログイン情報を保持していない状況は、サイトの所有権を実質的に手放しているのと同じだ。開発者に管理を委託する場合でも、管理者アカウントの追加権限だけは共有してもらい、緊急時にアクセスできる状態を維持する。

定期的なバックアップと復旧手順の確認

ログインページがリダイレクトされる問題に限らず、サイトのトラブル全般に備えて定期的なバックアップを取得しておく。バックアップからの復旧手順も一度シミュレーションしておくと、緊急時に慌てずに対処できる。バックアップに含めるのはデータベースとwp-contentディレクトリの両方だ。

よくある質問

セキュリティプラグインを入れていないのにリダイレクトされるのはなぜ?

セキュリティプラグインがなくても、.htaccessのリダイレクトルール、Cloudflareのページルール、テーマのfunctions.phpに書かれたカスタムコードが原因になる。また、サイトが改ざんされている場合は、不正なコードがリダイレクトを引き起こしている可能性もある。サーバーのファイルを直接確認するのが確実な切り分け方法だ。

ホスティング会社に連絡する時に何を伝えればよい?

ドメイン名、wp-adminがホームページへリダイレクトされる状況、管理画面のログイン情報を持っていないことの3点を伝える。所有証明として請求書や支払い明細、契約確認メールを求められた場合に備えて準備しておく。whois情報に自分の名前が登録されていればそれも提示できる。

Cloudflareのページルールが原因だった場合、どうすればよい?

Cloudflareの管理画面にアクセスできるなら、ページルールとWAFのカスタムルールを確認し、wp-adminとwp-login.phpを対象にしたブロックやリダイレクト設定を無効化する。アクセスできない場合は、Cloudflareのサポートに所有証明を提示してアクセス回復を依頼する。ドメインのwhois情報が自分名義であれば回復できる可能性が高い。

ログインURLを変更した覚えがないのに変更されていた場合、ハッキングの可能性は?

可能性はある。サイトの改ざんによって.htaccessやfunctions.phpにリダイレクトコードが仕込まれたケースも報告されている。ログインできるようになったら、WordfenceやSucuriなどのセキュリティプラグインでスキャンを実行し、不審なファイルや管理者ユーザーがいないかを確認する。パスワードの全面変更も推奨される。

開発者に連絡がつかないままサイトを移管するには?

ホスティング会社からFTPと管理画面のアクセス権を取得したら、データベースのエクスポートとwp-contentディレクトリのダウンロードを行い、新しい環境へ移管する。DNS設定を変更して新しいサーバーに向ける。ドメインの管理権限が自分にあれば、移管は比較的スムーズに進む。旧環境の支払いが止まってサイトが消失する前に、早めの移管作業が重要だ。

この記事のポイント

  • wp-adminとwp-login.phpがホームへリダイレクトされる主因はセキュリティプラグインのURL変更、.htaccess、Cloudflare設定
  • ホスティングなしでも非表示ログインURLの候補試行やシークレットウィンドウ確認は可能
  • 開発者に連絡がつかない場合はホスティング会社へ所有証明を添えて直接連絡する
  • サーバーアクセス回復後は.htaccess確認とプラグイン無効化による切り分けが有効
  • 再発防止にはログインURLの記録共有とホスティング管理権の自己保持が欠かせない
WordPress 7.1.3 セキュリティアップデート公開。7件の脆弱性修正と即時更新の必要性

WordPress 7.1.3 セキュリティアップデート公開。7件の脆弱性修正と即時更新の必要性

WordPress 7.1.3が10月6日に公開された。セキュリティ修正とメンテナンスを兼ねたリリースで、7件の脆弱性修正と4件のバグ修正が含まれている。

セキュリティリリースであるため、公式サイトはすべてのサイト管理者に即時更新を推奨している。特にコメント管理画面に保存型XSSが発見されており、悪用されると管理者権限を奪われる可能性がある。

この記事では7.1.3で修正された脆弱性の内容、更新手順、バックポートの状況を解説する。サイトを安全に保つための具体的なチェックポイントもあわせて紹介する。

WordPress 7.1.3リリースの概要

WordPress 7.1.3リリースの概要

今回のリリースは定期アップデートではなく、セキュリティ上の問題に対処するための緊急リリースとして位置づけられている。WordPressのセキュリティリリースは、脆弱性の詳細が公開される前に修正版を配布する仕組みだ。今回も7件のセキュリティ修正が含まれており、いずれも悪用されるとサイトの安全性に重大な影響を及ぼす可能性がある。

リリースの基本情報

WordPress 7.1.3は、7.1系の3番目のメンテナンスリリースである。過去のメンテナンスリリースと同様に、バグ修正とセキュリティ修正が同時に行われている。セキュリティ修正が7件、バグ修正が4件だ。バグ修正の内訳はトラッカーのチケットで公開されており、特定の条件下で発生する不具合が対象となっている。

リリースを主導したのはJake Spurlock氏だ。WordPressコア開発のリリースリードとして、複数のコントリビューターと非同期で調整しながら安定版リリースまでこぎつけた。

即時更新が求められる理由

セキュリティリリースの性質上、更新を後回しにすればするほど攻撃を受けるリスクが高まる。攻撃者は公開された修正内容を逆に解析し、まだ更新していないサイトを狙うことが多い。特に今回修正された保存型XSSは承認待ちコメントを経由して悪用できるため、コメント機能を有効にしているサイトは注意が必要だ。

修正された7件の脆弱性

修正された7件の脆弱性

今回のリリースで修正された脆弱性を、影響度の高い順に見ていく。いずれも実際に悪用される前に報告・修正されており、報告者はWordPressセキュリティチームから謝辞が述べられている。

コメント管理画面の保存型XSS

最も深刻な問題は、コメント管理画面における保存型XSS(クロスサイトスクリプティング)だ。承認待ちコメントに細工を施すことで、管理者がコメント管理画面を開いた際にスクリプトが実行される可能性がある。XSSはWebアプリケーションの弱点を突く代表的な攻撃手法で、保存型の場合、悪意のあるコードがサーバーに保存された後に被害が発生する。

この問題は、セキュリティ企業のTrail of BitsとOpenAIの協力によって報告された。管理画面のコメント一覧は多くの管理者が日常的にアクセスするページであり、発見が遅れれば広範囲のサイトに影響が及ぶ可能性があった。

WXRエクスポート機能の2次SQLインジェクション

WXR(WordPress Extended RSS)エクスポート機能に2次SQLインジェクションの脆弱性が見つかった。WXRエクスポートとは、WordPressの投稿や固定ページをXML形式で書き出す機能だ。2次SQLインジェクションとは、悪意のあるデータが一度データベースに保存された後、別の処理でクエリとして使用される際に攻撃が成立するタイプの脆弱性を指す。

この問題はAnthropicによって報告された。サイトの移行やバックアップ目的で頻繁に利用されるエクスポート機能に脆弱性があったため、影響範囲は広い。

その他5件の脆弱性修正

  • HTTP通信処理の絶対URL生成メソッドにDoS(サービス拒否)脆弱性が存在した。Anthropicが報告した
  • 投稿者権限のユーザーが固定投稿を設定できる権限の不備が存在した。Anthropicが報告した
  • 未公開記事や非公開記事のコメントが認証なしで閲覧できる問題が見つかった。PatchstackのAnanda Dhakal氏が報告した
  • Imgur埋め込み機能にXSS脆弱性が存在した。複数の研究者が共同で報告した
  • ステータスとタイプを組み合わせたフックにパラメータ検証の不備があり、アクション名の衝突を引き起こす可能性があった。WordPressセキュリティチームのAlex Concha氏が報告した

報告元にAnthropicとOpenAIが複数含まれている点が今回の特徴だ。AI関連企業がWebアプリケーションのセキュリティ監査に積極的に関わるようになってきた流れを反映している。

更新前のサイト(脆弱な状態)
保存型XSS 承認待ちコメント経由で管理者を狙う
SQLインジェクション WXRエクスポートが攻撃対象
権限の不備 投稿者権限で固定投稿を設定可能
情報漏えい 未公開記事のコメントが閲覧可能
リスク 7件の脆弱性が悪用可能な状態
↓
更新後のサイト(対策済み)
XSS対策済み コメント管理画面が安全に
SQL対策済み WXRエクスポートが保護される
権限制御修正 投稿者権限の範囲が適正化される
アクセス制御修正 未公開コメントが適切に保護される
効果 7件の脆弱性がすべて修正済み
■ 更新前は脆弱性が残る ■ 更新後は対策済み

このデモは、7.1.3適用前後でサイトの脆弱性状態がどのように変化するかを示している。セキュリティリリースの適用により各脆弱性が解消される。

今回の脆弱性報告には、セキュリティ専門企業だけでなくAI関連企業の関与が目立つ。Anthropicは3件、OpenAIはTrail of Bitsとの協力で1件を報告している。AI技術を活用したコード解析やセキュリティ監査の精度が向上していることを示す事例と言える。

更新手順と確認事項

更新手順と確認事項

セキュリティリリースの適用は優先度が高いタスクだ。更新にはいくつかの方法があるが、いずれの場合も事前のバックアップが推奨される。更新後に問題が発生した場合にロールバックできる体制を整えておくことが重要である。

ダッシュボードから即時更新

最も簡単な方法は、WordPress管理画面からの更新だ。ダッシュボードにアクセスし「更新」セクションを開くと、WordPress 7.1.3への更新通知が表示される。「今すぐ更新」ボタンをクリックすると自動的に更新プロセスが実行される。自動バックグラウンド更新が有効なサイトでは、すでに更新が自動適用されている場合が多い。

手動で更新する場合は、WordPress.orgからzipファイルをダウンロードしてサーバーにアップロードする方法もある。FTPクライアントやホスティングサービスのファイルマネージャーを使って更新できる。ただし手動更新はファイルの上書きミスなどのリスクがあるため、ダッシュボードからの更新が推奨される。

更新前のバックアップと更新後の確認

更新前には必ずバックアップを取得すること。データベースとファイルの両方をカバーするバックアッププラグインを使うか、ホスティングサービスのバックアップ機能を利用する。更新後に問題が発生した場合、バックアップから復元することで被害を最小限に抑えられる。

更新後は、サイトのフロントエンドと管理画面の両方が正常に動作することを確認する。フォームの送信、コメント機能、固定投稿の表示などを重点的にチェックするとよい。キャッシュプラグインを使っている場合は、キャッシュをクリアしてから動作確認を行うことが重要だ。

STEP 1 サイトのバックアップを取得する
↓
STEP 2 ダッシュボードの「更新」画面を開く
↓
STEP 3 「今すぐ更新」をクリックする
↓
STEP 4 更新後の動作確認とキャッシュクリアを行う
■ STEP 1 準備 ■ STEP 2 確認 ■ STEP 3 実行 ■ STEP 4 検証

このデモは、WordPress 7.1.3への更新手順を4つのステップで示している。バックアップ、更新画面、更新実行、動作確認の順に進める。

バックポートとコミュニティの対応

バックポートとコミュニティの対応

セキュリティ修正は、サポート対象の全ブランチにバックポートされる。現在のサポート対象は最新版から4.7までだ。バックポートとは、最新版で見つかった脆弱性の修正パッチを旧バージョンにも適用する作業を指す。WordPressは多くのバージョンが並行して使用されているため、この措置が重要になる。

旧バージョンへのバックポート

バックポートは準備が整い次第、順次提供される。すべての旧バージョンに同時に提供されるわけではないため、旧バージョンを使用している場合は、各ブランチの更新通知を定期的に確認することが推奨される。ただし、WordPressは最新版のみが積極的にサポートされる方針だ。セキュリティリスクを低減するためには、可能な限り最新版へのアップグレードが望ましい。

リリースを支えた貢献者たち

WordPress 7.1.3のリリースには34名のコントリビューターが参加した。リリースリードを務めたJake Spurlock氏を中心に、コアコミッターやセキュリティチームのメンバーが非同期で調整しながら、安定版リリースの提供にこぎつけた。WordPressの開発体制はオープンソースコミュニティの典型的なモデルであり、世界中の開発者が自主的に参加している。

セキュリティ修正の報告者には、Trail of Bitsのような専門企業に加えて、AnthropicやOpenAIといったAI関連企業が含まれている点が注目される。AI技術を活用したコード解析や脆弱性スキャンが、オープンソースソフトウェアのセキュリティ品質向上に貢献する事例が増えている。

この記事のポイント

  • WordPress 7.1.3はセキュリティ修正7件とバグ修正4件を含む緊急リリースである
  • コメント管理画面の保存型XSSは承認待ちコメント経由で悪用できるため特に危険だ
  • WXRエクスポートの2次SQLインジェクションや投稿者権限の不備も修正された
  • 更新はダッシュボードから数クリックで完了する。自動更新が有効なら適用済みの可能性が高い
  • 更新前のバックアップと更新後の動作確認が安全なサイト運営の基本である
サイト改修の見積もり依頼で費用が変わる条件と、伝えるべき3つのこと

サイト改修の見積もり依頼で費用が変わる条件と、伝えるべき3つのこと

サイト改修の見積もり依頼で、費用が変わるのはページ数と、どこまで手を入れるかだ。

標準的なWordPressサイトを作り直す範囲なら基本の作業で収まるが、特殊な設定が残っていると作業量が増える。

私たちのサイト改修は、トップから下層まで全体をそろえ、スマホ表示と更新のしやすさまで整える。

見積もりと相談は無料だ。

サイト改修の見積もり依頼で、費用が変わる5つの条件

サイト改修の見積もり依頼で、費用が変わる5つの条件

見積もりの金額を左右するのは、ページ数と、特殊な設定が残っているかどうかだ。

標準的なWordPressサイトを作り直す範囲なら、基本の作業で収まる。

そこから外れる条件があると、調査と移行の作業が増えて金額に反映される。

ページ数が数百規模に及ぶ場合

標準的な構成のサイトは、ページの流れとデザインが一定で、移行の手順も揃う。

ページ数が数百規模に及ぶと、1つずつのレイアウトと並びを確認する作業が増え、見積もりは作業量に応じて追加になる。

特殊なプラグインや独自に開発された機能がある場合

古いサイトに特殊なプラグインや独自の機能が残っていると、動く範囲を調べ、移行の方法を個別に確かめる手間が加わる。

見極めには調査が必要で、その分が費用に反映される。

CDNやサーバー環境が一般的でない場合

CDNが設定されているサイトや、サーバーの構成が一般的でないサイトは、全ページの配信先と動きを確認する工程が増える。

移行前の調査と移行後の確認の両方で、作業量が上乗せになる。

WooCommerceを新しく入れる場合

ネットショップの機能を新しく入れるときは、商品の管理画面だけでなく、カートや決済、注文管理の設定まで加わる。

改修の範囲にショップの構築が乗るため、その作業量が見積もりに反映される。

条件作業量が増える理由
ページ数が数百規模全ページのレイアウトと並びの確認が増える
特殊なプラグインや独自機能動く範囲と移行方法の個別調査が加わる
CDNの設定がある全ページの配信先とキャッシュの確認が増える
サーバー構成が一般的でない環境調査と移行の手順が増える
WooCommerceを新しく入れるカートと決済と注文管理の設定が加わる

見積もり依頼の前に伝えると、金額が早く決まる3つのこと

見積もり依頼の前に伝えると、金額が早く決まる3つのこと

見積もり依頼で最初に伝えてほしいのは、いまのサイトのURLだ。

そこにおおよそのページ数と、どこを変えたいかを添えてもらえれば、手を入れる範囲が見えてくる。

いまのサイトのURL

サイトのURLが分かれば、古いテーマの状態や構成を先に確認できる。

手を入れるべき所と、そのままでよい所を分けて伝えるための材料になる。

おおよそのページ数と変えたいところ

ページ数は、全ページを確認する作業量に直結する。

変えたいところを「見た目を新しくしたい」「スマホでの表示を直したい」のように伝えてもらえれば、見積もりの範囲を絞れる。

雰囲気を寄せたい参考サイトがあればURL

参考サイトのURLがあれば、デザインの方向性を言葉で説明する手間が減る。

いまのサイトの文章と画像を引き継ぎながら、その雰囲気に寄せて作る。

私たちのサイト改修でやること、やらないこと

私たちのサイト改修でやること、やらないこと

私たちの改修は、トップページだけでなく下層ページまで含めて全体の見た目をそろえる。

見た目を新しくするだけではなく、更新のしやすさと問い合わせまでの導線を先に設計する。

トップから下層まで1つのデザインにそろえる

使うテーマを入れ替え、サイトに合わせて最適化する。

トップページと主な下層ページの構成を組み直し、ページ同士の行き来の仕方まで考え直す。

どのページを開いても同じ印象で見てもらえる。

スマホ表示とフォーム送信の確認まで済ませる

スマートフォンとタブレットでも崩れずに読める表示にする。

お問い合わせフォームは設置し直し、実際に送って届くことを確かめる。

訪問者が迷わずに進める導線と並び方に整える。

編集画面を整えて、あなた自身で更新できる状態で渡す

入っているプラグインを整理し、必要なものは別のものへ入れ替える。

内部SEOの基本的な設定も行う。

編集画面を使いやすく整え、お知らせやブログをあなた自身で追加できる状態で渡し、操作の説明も付ける。

全部を作り変える前提の提案はしない。

いまのサイトを拝見して、手を入れるべき所とそのままでよい所を分けて伝える。

いまの文章と画像を引き継ぐので、原稿を一から用意し直さなくてよい。

トップページだけの改修と、丸ごと改修の違い

トップページだけの改修と、丸ごと改修の違い

トップページだけを綺麗にしても、下層ページとの見た目がちぐはぐになる。

私たちは下層ページまで含めて全体をそろえ、ページ同士の行き来まで組み直す。

項目トップページだけの改修私たちの丸ごと改修
対象範囲トップページのみトップから下層まで全ページ
デザインの統一下層と食い違いやすい全ページで同じ印象にそろえる
スマホ表示下層は崩れたまま残る全ページで崩れずに読める
更新のしやすさ変わらない編集画面を整えて自分で更新できる
問い合わせ導線変わらないフォームの確認と導線の整理まで行う

サイト改修の見積もりを依頼すると、どう進むか

サイト改修の見積もりを依頼すると、どう進むか

まずは、いまのサイトのURLを送ってほしい。

手を入れるべき所と、そのままでよい所を分けてお伝えする。

どこまで変えるべきか決めきれていない段階でも相談できる。

おおよそのページ数と、どこを変えたいかを添えてもらえれば、見積もりの範囲が早く固まる。

参考サイトがあれば、そのURLも役に立つ。

相談と見積もりは無料だ。

胸を張って案内できるサイトが手に入り、名刺代わりに見せられる。

サイトから入る問い合わせが増え、紹介に頼らなくても仕事が回っている状態を、改修の設計から一緒に作っていく。

依頼はWordPressサイトの丸ごとリニューアルのご相談ページから。

WordPressサイトの丸ごとリニューアル古くなったWordPressのサイトを、トップも下層もまとめて作り直し、スマホ表示と内部SEOまで整えるサービスの詳細を見る

よくある質問

サイトを拝見するのに費用はかかるか

かからない。

見積もりと相談は無料だ。

原稿を一から用意し直す必要はあるか

いまの文章と画像を引き継いで新しいテーマへ移す。

原稿を新しく用意する必要はない。

スマホで崩れている表示は全ページ直るのか

スマートフォンとタブレットでも崩れずに読める表示にする。

トップページだけでなく、下層ページまで含めて整える。

更新を自分で回せるようになるのか

編集画面を使いやすく整え、お知らせやブログをあなた自身で追加できる状態で渡す。

操作の説明も付ける。

有料テーマを使う場合のテーマ代はどうなるのか

有料テーマを使う場合のテーマ代は依頼側の負担になる。

無料テーマでも作れる。

この記事のポイント

  • サイト改修の見積もりは、ページ数と特殊な設定の有無で費用が変わる
  • 見積もり依頼では、サイトのURLとページ数、変えたいところを伝える
  • 私たちの改修はトップから下層まで全体をそろえ、スマホ表示と更新のしやすさまで整える
  • トップだけの改修と違い、下層ページまで含めて見た目と導線を統一する
  • 見積もりと相談は無料だ
WordPressサイトの丸ごとリニューアル古くなったWordPressのサイトを、トップも下層もまとめて作り直し、スマホ表示と内部SEOまで整えるサービスの詳細を見る
WordPress管理画面でトグル設定が勝手にオンに戻る時の原因と対処法

WordPress管理画面でトグル設定が勝手にオンに戻る時の原因と対処法

WordPress管理画面のトグル設定をオフにしても勝手にオンに戻る場合、原因は主にJavaScriptエラーかキャッシュの不整合にある。トラッキング不具合時の診断メール設定が保存されない症状では、画面の表示とデータベースの値がずれている可能性が高く、切り分け手順を順に試すことが最も確実な対処法だ。

トグル設定が勝手にオンへ戻るのはなぜか

トグル設定が勝手にオンへ戻るのはなぜか

WordPressの管理画面にあるトグルボタンは、押した瞬間にAJAX通信でサーバーへ設定値を送信する仕組みだ。送信された値はnonce検証を経てデータベースに保存される。ここで問題が起きると、画面上ではオフに切り替わったように見えても、データベースには保存されないままになる。

別のページへ移動して戻った時、画面はデータベースから最新の設定値を読み込む。保存が失敗していれば、以前の値がそのまま表示されるためトグルがオンへ戻ったように見える。これが今回の症状の正体だ。

特に「トラッキング不具合時の診断メール」のような通知系の設定は、プラグイン側がデフォルトでオンにする仕様になっている場合がある。保存の失敗とデフォルト値の再適用が重なると、オフにしても戻るという挙動が顕著に現れる。

原因になりやすい要素は以下のとおりだ。

  • 管理画面でJavaScriptエラーが発生しAJAX送信が失敗している
  • キャッシュプラグインやオブジェクトキャッシュが古い設定値を返している
  • テーマや別のプラグインが設定を強制的にオンへ戻している
  • セキュリティプラグインがnonce検証やAJAX通信をブロックしている
  • データベースへの書き込み権限やオプション保存処理に問題がある
トグル設定の保存フローと失敗ポイント
オフに操作 → AJAXリクエスト送信 → データベース更新 → 保存完了
↓
AJAXエラー発生 → 保存に失敗 → 次回表示時にオンへ戻る
■ 正常時 ■ エラー時

このデモはトグル設定の保存が正常に終わる場合と、途中で失敗して次回表示時に設定が戻ってしまう場合のフローを示している。次節からは原因を特定するための手順を具体的に進めていく。

JavaScriptエラーをブラウザで確認する手順

JavaScriptエラーをブラウザで確認する手順

最初に確認するべきは管理画面でJavaScriptエラーが発生していないかだ。ブラウザの開発者ツールを使えば、AJAX通信が失敗した原因を直接確認できる。Chromeの場合はF12キー、Macの場合はCommand+Option+I、Windowsの場合はCtrl+Shift+Iで開発者ツールが開く。

開発者ツールが開いたらConsoleタブに切り替える。ここに赤いエラーメッセージが表示されていれば、それがトグル設定の保存を妨げている原因になる。特に「FAILED」「POST」「403」「500」のような表示がある場合は、AJAX通信そのものが失敗している証拠だ。

エラーが確認できた場合は、エラーメッセージの内容を控えておく。ファイル名や関数名が表示されていれば、どのプラグインやテーマがエラーの原因かを特定する手がかりになる。調査を次の段階へ進める前に、まずはエラーの有無を確認するだけで状況が大きく変わる。

JavaScriptエラーを確認する流れ
STEP 1 管理画面を開いた状態で開発者ツールを起動する
↓
STEP 2 Consoleタブで赤いエラーメッセージの有無を確認する
↓
STEP 3 エラーがあれば内容を控え、発生源を特定する
↓
STEP 4 トグル操作を再現しエラーが増えるか確認する

このデモはJavaScriptエラーの確認から発生源の特定までを順に示している。トグル操作を再現してエラーが増える場合は、そのトグルに関連するスクリプトでエラーが起きている可能性が高い。

キャッシュを削除して保存状態を確認する方法

キャッシュを削除して保存状態を確認する方法

JavaScriptエラーが見つからない場合はキャッシュの影響を疑う。サイト全体のキャッシュを削除してからトグル設定を再度オフにし、別ページへ移動して戻るという流れで確認する。WordPressでは複数のキャッシュ層が重なっていることがあり、それぞれを順にクリアする必要がある。

キャッシュプラグインのキャッシュを削除する

キャッシュプラグインを利用している場合は、プラグインの管理画面からキャッシュを全削除する。代表的なプラグインでは「キャッシュを消去」「Purge All」のようなボタンが用意されている。削除後、トグル設定をオフにして別ページへ移動し、戻って状態を確認する。

オブジェクトキャッシュを無効化して確認する

高速化のためにRedisやMemcachedといったオブジェクトキャッシュを導入している場合は、一時的に無効化して確認する。オブジェクトキャッシュはデータベースの値をメモリ上に保持するため、更新処理が古い値を返し続けてしまうことがある。wp-config.phpに記載されているキャッシュ関連の設定を一時的に外すか、サーバー側のキャッシュサービスを停止してテストする。

ブラウザキャッシュを削除する

ブラウザ側のキャッシュが管理画面の表示に影響することは少ないが、シークレットウィンドウを使えば完全にキャッシュの影響を排除できる。シークレットウィンドウで管理画面へログインし、トグル設定をオフに変更してから別ページへ移動し、再度戻って状態を確認する。この方法で問題が再現しなければ、通常のブラウザセッションにキャッシュが残っていたことになる。

プラグイン競合を切り分ける手順

プラグイン競合を切り分ける手順

JavaScriptエラーやキャッシュの影響が見つからない場合、次に疑うのはプラグイン同士の競合だ。特にセキュリティ系プラグインや高速化系プラグインは、管理画面のAJAX通信に干渉することがある。テーマに含まれるスクリプトが原因になることも少なくない。

切り分けは次の順序で行う。まず全プラグインを一括で無効化し、標準テーマ(Twenty Twenty-FourやTwenty Twenty-Fiveなど)へ切り替える。この状態でトグル設定をオフに変更し、別ページへ移動して戻る操作を行い、設定が保持されるか確認する。

この状態で問題が再現しなければ、プラグインの1つずつを有効化して同様の操作を繰り返す。問題が再現した時点で、直前に有効化したプラグインが原因の可能性が高い。特定できたらそのプラグインの設定を見直すか、開発元へ情報を集める。

なお全プラグインの一括無効化はサイトの表示にも影響を与える。切り分け作業を行う場合は、アクセスの少ない時間帯を選ぶかステージング環境を利用する。

プラグイン競合の切り分け手順
STEP 1 全プラグインを無効化し標準テーマへ切り替える
↓
STEP 2 トグルをオフにし別ページへ移動して戻る
↓
STEP 3 問題がなければプラグインを1つずつ再有効化する
↓
STEP 4 問題が再現した時点で原因プラグインを特定する

このデモはプラグイン競合の特定を効率的に進めるための順序を示している。問題が再現したタイミングを記録しておくと、原因プラグインの特定がスムーズになる。

データベースの設定値を直接確認して修正する方法

データベースの設定値を直接確認して修正する方法

ここまでの切り分けで原因が特定できない場合は、データベースに保存されている設定値を直接確認する。WP-CLI(WordPress Command Line Interface。WordPressのコマンドライン操作ツール)が使える環境であれば、管理画面を経由せずにオプション値を調べられる。

WP-CLIでオプション値を検索する

トグル設定に関連するオプション名を確認するには、wp option listコマンドを使う。オプション名はプラグインごとに異なるが、diagnosticやtrackingといったキーワードを含むものが対象になる。該当するオプションの値がオン(1やyesと表示される)になっていれば、設定がデータベースに保存されていないことが確定する。

wp option list | grep -i diagnostic
wp option list | grep -i tracking

見つかったオプション名を指定して値を確認するには、wp option getコマンドを使う。値がオンを示していれば、トグル設定が保存されていないことになる。値がオフを示していれば、保存自体は成功しているため別の要因が影響している。

wp option get 該当するオプション名

phpMyAdminで直接確認する場合

WP-CLIが使えない環境ではphpMyAdminを使う。データベース内のwp_optionsテーブル(プレフィックスが異なる場合は該当するテーブル)から、option_name列にキーワードを含む行を検索する。option_value列の値がオンを示していれば保存が失敗している。

検索にはSQL文を使う。プレフィックスは環境によって異なるため、テーブル名を確認してから実行する。

SELECT * FROM wp_options WHERE option_name LIKE '%diagnostic%';

直接データベースを変更する場合は必ずバックアップを取ってから行う。設定値がシリアル化された配列の中に含まれている場合、直接変更するとデータ構造が崩れるリスクがある。不安がある場合は手動更新を避け、プラグインの設定画面から保存し直す方が安全だ。

確認結果による原因の判定
値がオン 保存が失敗しているためJavaScriptエラーやAJAX通信の問題を再調査する
↓
値がオフ 保存は成功しているためフィルターやキャッシュの影響を調査する

このデモはデータベースの設定値の状態から原因の方向性を切り分ける方法を示している。保存の成否を知ることで、その後の調査対象を絞れる。

よくある質問

トグル設定が勝手に戻るのはいつどんな状況で起きるのか

主にJavaScriptエラーが発生している場合に起きやすい。管理画面のトグルはAJAX通信で設定を保存するが、他のプラグインやテーマが読み込むスクリプトと競合して通信が失敗すると、画面表示だけが切り替わって保存が行われない。キャッシュプラグインの影響で古い設定値が表示される場合もある。

キャッシュプラグインを使っていないのに設定が戻るのはなぜか

サーバー側のオブジェクトキャッシュやホスティング会社が提供する静的キャッシュが影響している可能性がある。またテーマのfunctions.phpや別のプラグインに、設定を強制的にオンへ戻すコードが含まれている場合もある。データベースの値を直接確認すれば保存の成否がわかる。

セキュリティプラグインが原因になることはあるか

ある。セキュリティプラグインが管理画面のAJAXリクエストやnonce検証をブロックすると、設定の保存が失敗する。ファイアウォール機能が過剰に反応して管理画面の操作を妨げるケースがあるため、一時的に無効化して切り分けを行う必要がある。

設定値をデータベースから直接変更しても問題ないか

問題ない場合が多いが、バックアップを取ってから行うことが必須。WP-CLIでオプション名を確認してからupdate_optionを行う。ただしプラグインの設定構造によってはシリアル化された配列に含まれており、直接変更が難しいこともある。不安がある場合はプラグインの設定画面から保存し直す方が安全だ。

本体のアップデートで解消されることがあるか

ある。プラグイン側のバグが原因の場合は本体アップデートで修正されることが多い。プラグインとWordPress本体を最新版に更新してから再度確認する価値は十分にある。ただし更新前にバックアップを取っておくと安心だ。

この記事のポイント

  • トグル設定が勝手に戻る原因の多くはJavaScriptエラーかキャッシュの不整合
  • ブラウザの開発者ツールでconsoleエラーを確認するのが最初の切り分け手順
  • キャッシュプラグインとオブジェクトキャッシュを順に無効化して特定する
  • プラグインを全停止し1つずつ再有効化して競合元を見つける
  • 最終手段としてWP-CLIやphpMyAdminからデータベースの設定値を直接確認する
WooCommerce 11.1.2リリース!商品ギャラリーの無限再帰とメールレビュー検証を修正

WooCommerce 11.1.2リリース!商品ギャラリーの無限再帰とメールレビュー検証を修正

WooCommerce 11.1.2が2026年9月22日にリリースされた。商品バリエーションギャラリーで発生する無限再帰の修正と、メール経由の商品レビューにおける入力検証の強化が含まれるドットリリースだ。

今回の更新はセキュリティ更新に該当する。データベースの更新は不要で、適用のハードルは低い。ECサイト運営者は早めのアップデートを検討したい。

WooCommerce 11.1.2のリリース概要

WooCommerce 11.1.2のリリース概要

WooCommerceのドットリリースとは、メジャーバージョンやマイナーバージョンの間に挟まれる小規模な修正更新のことだ。新機能の追加はなく、既知の不具合修正とセキュリティ強化に絞られる。

今回の11.1.2は、2026年9月22日に公開された。公式のリリースノートによると、セキュリティ更新に該当し、データベース更新は不要とされている。つまり、プラグインの更新ボタンを押すだけで適用が完了する。

修正内容は2つに絞られている。1つ目は商品バリエーションギャラリーにおける無限再帰の防止、2つ目はメールベースの商品レビューにおける検証の厳格化だ。どちらもECサイトの安定稼働に直結する内容である。

商品バリエーションギャラリーの無限再帰を修正

商品バリエーションギャラリーの無限再帰を修正

1つ目の修正は、テーマがテンプレートファイル内で get_available_variations 関数を呼び出した際に無限再帰が発生する問題への対処だ。GitHubのプルリクエスト番号68939で修正されている。

無限再帰とは何か

無限再帰とは、関数が終了条件なしに自分自身を呼び出し続ける状態を指す。プログラミングの世界では「スタックオーバーフロー」と呼ばれるエラーにつながる。たとえるなら、合わせ鏡の間に立ったときに像が無限に反射して見えるのに似ている。どこかで止める仕組みがなければ、コンピュータのリソースを使い果たしてしまう。

WooCommerceの商品バリエーションギャラリーでは、テーマが独自に get_available_variations を呼び出すケースが問題になった。テーマのテンプレートファイルにこの関数の呼び出しが含まれていると、内部のフックが再帰的に呼び出されてスタックが溢れ、商品ページ全体が白画面になったり応答しなくなったりする。

修正の内容と影響範囲

修正後は、テーマが get_available_variations をテンプレートファイルで呼び出しても、再帰的な呼び出しが防止される。バリエーションごとの画像ギャラリーが正常に表示され、商品ページが通常どおり動作するようになる。

影響を受けるのは、バリエーション商品を持つECサイトで、なおかつテーマがこの関数を直接呼び出している場合に限られる。標準のWooCommerceテーマや多くの人気テーマでは問題は発生しない。しかし、独自にカスタマイズしたテーマを使っている場合は注意が必要だ。

修正前(Before)
⚠ ページが応答しない
テーマが get_available_variations をテンプレート内で呼び出すと、内部フックが再帰的に実行されてスタックが溢れる。商品ページ全体が白画面になり、購入フローが停止する。
↓
修正後(After)
✅ ギャラリーが正常に表示
再帰的な呼び出しが防止され、バリエーション画像の一覧が正しく表示される。商品ページが通常どおり動作し、購入フローに支障が出ない。
■ 赤枠は修正前の問題状態 ■ 緑枠は修正後の正常状態を示す

上図のとおり、修正前は get_available_variations の再帰呼び出しにより商品ページ全体が停止する可能性があった。修正後はこの再帰が防止され、ギャラリーが正しく表示される。独自テーマを運用している場合は、この修正の適用前にステージング環境で動作確認することを推奨する。

メールレビューの検証を強化

メールレビューの検証を強化

2つ目の修正は、メール経由で投稿される商品レビューの入力検証を厳格化するものだ。GitHubのプルリクエスト番号68961で対応された。セキュリティ更新とされる理由はこの修正にある。

メールベースのレビュー機能とは

WooCommerceには、購入者からのレビューをメールで受け付ける仕組みがある。顧客が注文後に届くメール内のリンクからレビューを投稿できる機能だ。ECサイトにとってレビューは信頼構築の要であり、この導線はコンバージョン率にも影響する。

問題は、このメール経由の投稿経路において入力値の検証が十分でなかった点だ。悪意のある第三者が不正なデータを送信する余地があり、セキュリティリスクになり得た。今回の修正では、この検証処理が厳格化されている。

検証強化がもたらす効果

検証の厳格化により、不正な入力や改ざんされたデータがレビューとして投稿されるリスクが低減される。レビューの信頼性が保たれ、ECサイトの評判管理にも好影響を与える。

店舗運営者の目線では、この変更によってレビュー投稿のフローに大きな変化はない。顧客が正規のメールリンクからアクセスする限り、従来どおりの手順でレビューを投稿できる。内部のバリデーションが強化されただけなので、ユーザビリティへの影響はない。

STEP 1 顧客が注文後のメールからレビューフォームを開く
↓
STEP 2 WooCommerceがレビューデータを受信
↓
STEP 3 入力値の検証を実行(今回強化された箇所)
↓
STEP 4 検証を通過したレビューが公開される
■ オレンジ色のSTEP 3が今回の修正で強化された検証処理を指す

上図のとおり、メール経由のレビュー投稿は4段階で処理される。今回の修正はSTEP 3の検証処理に焦点を当てており、不正なデータの流入を防ぐ役割を担う。顧客側の操作フローに変更はない。

ECサイト運営者が取るべき対応

ECサイト運営者が取るべき対応

この更新はセキュリティ更新のため、基本的には即時適用が望ましい。ただし、独自テーマやカスタムコードを使っているサイトでは、事前の動作確認を怠らないことが重要だ。

更新前の準備

更新の前に、サイト全体のバックアップを取得する。WooCommerceを運用するECサイトでは、商品データ、注文履歴、顧客情報が失われると事業に直結する。更新作業の前には必ずデータベースとファイルの両方をバックアップしておく。

また、ステージング環境が利用できるのであれば、本番環境に適用する前に更新後の動作を確認する。特にバリエーション商品を持つ場合は、商品ページでギャラリーが正しく表示されるかをチェックしたい。

更新手順の目安

WooCommerceの更新はWordPressの管理画面から行える。プラグイン一覧からWooCommerceを選択し、更新を実行するだけだ。データベース更新が不要なため、更新後のマイグレーション処理も発生しない。

更新後は、商品ページ、カート、チェックアウト、レビュー投稿の各フローが正常に動作するかを確認する。特にメールレビュー機能を有効にしている場合は、テスト用のレビューを1件投稿して検証すると安心だ。

この記事のポイント

  • WooCommerce 11.1.2は2026年9月22日に公開されたセキュリティ更新で、データベース更新は不要
  • 商品バリエーションギャラリーの無限再帰を修正し、独自テーマ利用時の白画面リスクを解消
  • メール経由の商品レビューにおける入力検証を強化し、不正データの投稿リスクを低減
  • 独自テーマやカスタムコードを運用中のサイトは、ステージング環境での事前確認を推奨
WordPress 7.1.1セキュリティリリース公開。11件の脆弱性修正と即時更新のすすめ

WordPress 7.1.1セキュリティリリース公開。11件の脆弱性修正と即時更新のすすめ

WordPress 7.1.1が2026年9月17日に公開された。セキュリティリリースと位置づけられ、11件の脆弱性修正を含む。コアのバグ修正は17件、ブロックエディタのバグ修正は19件だ。

今回のリリースはセキュリティ修正を主目的としている。すべてのサイト管理者に即時更新が推奨される。自動更新が有効なサイトでは、すでに適用が始まっている場合もある。

セキュリティリリースの最大の特徴は、放置した場合のリスクが高いことだ。XSS(クロスサイトスクリプティング)やパストラバーサルなど、攻撃者に悪用されかねない脆弱性が多数修正されている。サイトを守るには更新が最優先となる。

WordPress 7.1.1リリースの概要

WordPress 7.1.1リリースの概要

WordPress 7.1.1は「ショートサイクルリリース」と呼ばれる短い間隔で提供される更新だ。メジャーリリースの7.1から間もない段階で、セキュリティと安定性の向上を目的に公開された。次のメジャーリリースは7.2で、12月を予定している。

今回の修正内容は、コア17件、ブロックエディタ19件、セキュリティ11件の合計47件にのぼる。セキュリティ修正が全体の約4分の1を占めており、いかにセキュリティ面が重視されたリリースかがわかる。

セキュリティリリースの最大の特徴は、対応の緊急性だ。通常の更新と異なり、脆弱性がすでに公開されている可能性があるため、更新を先延ばしにすると攻撃の標的になりやすい。公式発表でも「直ちに更新すること」が明記されている。

STEP 1 WordPress管理画面にログイン
↓
STEP 2 ダッシュボードの「更新」をクリック
↓
STEP 3 「今すぐ更新」をクリック
↓
STEP 4 更新完了のメッセージを確認

更新は管理画面から4ステップで完了する。自動更新が有効な環境では、手動操作なしで適用される。

修正されたセキュリティ脆弱性の詳細

修正されたセキュリティ脆弱性の詳細

11件のセキュリティ修正は、XSS、パストラバーサル、権限チェックの欠落、情報漏洩の4つに大別できる。それぞれ攻撃の仕組みや影響範囲が異なるため、サイト運営者は全体像を把握しておくとよい。

XSS(クロスサイトスクリプティング) 悪意のあるスクリプトを埋め込む攻撃
パストラバーサル アクセスできないファイルへの到達
権限チェックの欠落 不正なユーザーによる操作
情報漏洩 プライベートな情報の露出

11件のセキュリティ修正を種類ごとに分類すると、XSS、パストラバーサル、権限チェック欠落、情報漏洩の4つに大別される。それぞれの詳細を確認していく。

XSS関連の重大修正

XSS(クロスサイトスクリプティング)とは、悪意のあるスクリプトをWebページに埋め込む攻撃手法を指す。閲覧者がそのページを開くとスクリプトが実行され、クッキーの窃取やセッションハイジャックなどの被害につながる。

今回修正された中でも特に注意が必要なのが、wpautop()関数の格納型XSSだ。コメントを処理する際に悪意のあるスクリプトが保存され、コメントが承認されると訪問者のブラウザ上で実行される可能性があった。報告者はAwesome MotiveのRafie Muhammad氏だ。

カスタムヘッダーをサポートする一部テーマでも、同様の格納型XSSが確認された。テーマの機能を利用してスクリプトが保存され、後から閲覧したユーザーに影響が及ぶ構造だった。こちらはWordPressセキュリティチームのJeremy Felt氏が報告した。

修正前のwpautop関数(Before)
コメントに<script>悪意のあるコード</script>が保存される
閲覧者がコメントを開くとスクリプトが実行されてしまう
↓
修正後のwpautop関数(After)
コメントに<script>悪意のあるコード</script>が保存される
スクリプトタグが無害なテキストとして扱われる

wpautop()のXSS脆弱性が修正された。コメント内に埋め込まれたスクリプトが、実行可能なコードではなく単なる文字列として扱われるようになる。

権限・アクセス制御の修正

2件目はHTML APIのset_modifiable_text()関数で見つかった。突然閉じるシーケンスを使うことで、コメントの範囲を脱出できるという問題だ。WordPressセキュリティチームのJeremy Felt氏が報告した。

3件目は、特別に細工されたURLで非アクティブなテーマを自動的にインストールし、プレビューできる問題。攻撃者が意図しないテーマを読み込ませる可能性があった。Paulos Yibelo氏とpwn.aiの報告だ。

権限チェックの欠落も深刻だ。サイト管理者がネットワーク専用プラグインをネットワーク有効化できる問題、寄稿者(Contributor)以上の権限を持つユーザーが任意の投稿を上書きできる問題、WP REST Templates Controllerでの認証済みパストラバーサルなどが修正された。

パストラバーサルとは、ファイルパスを操作して本来アクセスできないファイルやディレクトリにアクセスする攻撃を指す。WP REST Templates Controllerの脆弱性では、認証済みユーザーがサーバー上のファイルに不正アクセスできる可能性があった。Anthropicの報告によるものだ。

寄稿者(Contributor)はWordPressのユーザー役割の一つで、投稿の作成はできるが公開はできない。この役割以上のユーザーによる不正な投稿上書きや、下書き・保留中投稿のスラッグ開示なども今回修正された。

XML-RPC経由の脆弱性も見逃せない。customize_changeset投稿を公開することでedit_cssのチェックを迂回できる問題が、WordPressセキュリティチームのBen Bidner氏によって報告された。XML-RPCはWordPressの外部アプリからの操作を受け付けるAPIで、これを悪用した攻撃が可能だった。

情報漏洩を防ぐ修正

attachment_submitbox_metadata()関数にread_postチェックが欠落しており、プライベートな親投稿のタイトルが漏れる問題が修正された。HDWSecの報告によるものだ。メディアライブラリの添付ファイル表示画面で、本来なら見えないはずの親投稿タイトルが露出する可能性があった。

コメントが認証済みユーザーなら誰でも再親付けできる問題も修正された。コメントの親子関係を任意に変更できることで、スレッド構造が破壊されたり、悪意のある内容が目立つ位置に表示されたりする可能性があった。Justin Hart氏とViridis Securityの報告だ。

コアとブロックエディタのバグ修正

コアとブロックエディタのバグ修正

セキュリティ修正以外にも、コア17件とブロックエディタ19件のバグ修正が含まれる。コアの修正はTracというバグ追跡システムで管理され、ブロックエディタの修正はGitHub上のGutenbergリポジトリで進められた。

ブロックエディタの19件の修正は、GitHubのPull Request #82383にまとめられている。エディタの安定性や操作性を向上させる修正が中心で、サイト制作に携わるユーザーにとっては作業効率の改善につながる。

メンテナンスリリースの目的は、新機能の追加ではなく既存機能の安定化だ。7.1系で発生していたバグが解消され、より快適な運用が可能になる。特にブロックエディタは日々のサイト更新作業に直結するため、19件の修正は実務での効果が期待できる。

更新手順と自動更新の仕組み

更新手順と自動更新の仕組み

WordPress 7.1.1への更新は、公式サイトからZIPファイルをダウンロードするか、管理画面の「更新」セクションから行う。管理画面では「更新」をクリックし、「今すぐ更新」をクリックするだけの簡単な操作で完了する。

自動バックグラウンド更新を有効にしているサイトでは、更新プロセスが自動的に開始される。共有サーバーやVPSなど、サーバー環境によって自動更新の動作は異なるが、手動更新でも数分以内に完了する。

更新前にバックアップを取得しておくのが望ましい。セキュリティリリースは即時適用が推奨されるが、万一のトラブルに備えて、データベースとwp-contentディレクトリのバックアップを取ってから更新するのが安全策だ。

更新前の確認(推奨)
データベースと wp-content のバックアップを取得する
↓
更新を適用
管理画面から 7.1.1 へ更新する
↓
更新後の確認
サイト画面と管理画面が正常に表示されるか確認する

更新前にバックアップを取り、更新後にサイト表示を確認する流れが安全だ。セキュリティリリースは緊急性が高いが、手順を守って適用する。

バックポートとサポート対象

バックポートとサポート対象

今回のセキュリティ修正は、WordPress 4.7まで遡ってバックポートされる。バックポートとは、最新版で修正された内容を古いバージョンにも適用することで、セキュリティ対策を広範囲に届ける仕組みだ。

ただし、公式にアクティブサポートされているのは最新版のWordPressのみだ。古いバージョンを使い続けるのはセキュリティリスクが高いため、できるだけ早く最新版へ移行するのが望ましい。バックポートはあくまで移行期間の猶予として機能する。

バックポートは順次進められており、準備が整い次第リリースされる。対象バージョンを使用している場合も、最新版への更新を優先して検討するのが推奨される。古いバージョンはセキュリティ面だけでなく、機能面でも取り残されるためだ。

この記事のポイント

  • WordPress 7.1.1はセキュリティリリースで、11件の脆弱性修正を含む
  • 格納型XSSやパストラバーサルなど、悪用リスクの高い問題が修正された
  • コア17件とブロックエディタ19件のバグ修正も含まれる
  • すべてのサイト管理者に即時更新が推奨される
  • バックポートは4.7まで提供されるが、最新版への移行が最優先