Category Archive お悩み・トラブル解決

ブロックエディタが点滅してクラッシュする時の原因と直し方

ブロックエディタが点滅してクラッシュする時の原因と直し方

ブロックエディタの画面が激しく点滅し、操作不能になったりエラーでクラッシュする場合、原因の大半はブラウザ拡張機能やキャッシュ、プラグイン競合による JavaScript の競合だ。セーフモードでの編集とブラウザのトラブルシューティングを順に行えば、大半のケースはすぐに編集を再開できる。

なぜブロックエディタが点滅してクラッシュするのか

なぜブロックエディタが点滅してクラッシュするのか

今回の事象の中心にあるのは getComputedStyle@[native code] から始まる JavaScript エラーだ。ブロックエディタは React ベースの画面であり、DOM 要素のスタイルを動的に計算する処理を多用している。この getComputedStyle 呼び出しが失敗すると、React の内部状態が破綻し、画面全体の再描画が無限ループに陥って「点滅」が発生する。

エラーが起きるトリガーは主に以下の3つだ。

  • AdBlock や Grammarly、翻訳ツールなど、ページの DOM 構造を書き換えるブラウザ拡張機能がエディタの動作と衝突している
  • プラグインやテーマが独自に読み込む古い JavaScript ライブラリが、WordPress 本体のバンドル済み React と二重読み込みになっている
  • ブラウザやサーバーに残ったキャッシュが、更新後のスクリプトと旧バージョンのスクリプトを混在させている

点滅はエディタが「レンダリング → クラッシュ → 再マウント → レンダリング」を一瞬で繰り返すために起こる。ユーザーからは、画面全体がチカチカしてボタンやブロックをクリックできない、またはクリックした瞬間に「このブロックでエラーが発生しました」と表示されて操作不能になる状態として見える。

Before(点滅発生中)

エディタ画面全体が高速で明滅し、ブロックを選択できない。クリックすると「このサイトで重大なエラーが発生しました」と表示される。

After(正常動作)

エディタが安定し、ブロックの選択・編集・移動が問題なく行える。画面のちらつきは完全に消えている。

エラー状態  修正後

ビジュアルエディタの点滅を止めて編集を再開する手順

ビジュアルエディタの点滅を止めて編集を再開する手順

原因を一つずつ潰していくのが確実だ。以下の手順は、影響範囲が小さくすぐ試せるものから並べている。手順1〜3で解決しなければ、手順4以降の WordPress 内部の切り分けに進む。

STEP 1 ブラウザ拡張機能をすべて無効にする
STEP 2 シークレットウィンドウで動作確認する
STEP 3 ブラウザキャッシュとサーバーキャッシュを削除する
STEP 4 プラグインの競合を切り分ける(セーフモード)
STEP 5 テーマを標準テーマに切り替える

ブラウザ拡張機能をすべて無効にして試す

最も短時間で試せて、かつ最も解決率が高い対処だ。ブロックエディタは高度な JavaScript で動作しており、広告ブロッカーや文法チェッカーなどの拡張機能が DOM に手を加えると、React の仮想 DOM と実際の DOM の整合性が崩れて getComputedStyle エラーが発生する。特に AdBlock 系、Grammarly、翻訳アドオン、ユーザースクリプト(Tampermonkey 等)が競合しやすい。

Chrome の場合、アドレスバー右の拡張機能アイコンから「拡張機能を管理」を開き、すべての拡張機能を一度オフにする。その状態でエディタを開き直し、点滅が収まるかを確認する。収まった場合は、拡張機能をひとつずつオンにして犯人を特定する。

シークレットウィンドウかゲストモードで動作を確認する

拡張機能を一括で無効化できるもっと手軽な方法が、シークレットウィンドウ(Chrome は Ctrl+Shift+N、Firefox は Ctrl+Shift+P)だ。シークレットモードでは拡張機能がデフォルトで無効になるため、ここで問題が再現しなければ、原因はほぼ確実に拡張機能かブラウザのキャッシュにある。

別のブラウザ(普段 Chrome を使っているなら Firefox や Edge)をインストールし、拡張機能を何も入れていない状態でエディタにアクセスするのも有効な切り分けになる。複数ブラウザで同じエラーが出る場合は、拡張機能ではなく WordPress 側の問題の可能性が高い。

ブラウザキャッシュとサーバーキャッシュを削除する

WordPress のバージョンアップやプラグイン更新の直後に点滅が始まった場合、ブラウザに古い JavaScript ファイルがキャッシュされている可能性が高い。キャッシュされた古いスクリプトと、サーバー上の新しいスクリプトが混ざると、関数の呼び出し不一致で React がクラッシュする。

  • ブラウザのキャッシュと Cookie を全期間で削除する(Chrome 設定→プライバシーとセキュリティ→閲覧履歴データの削除→「キャッシュされた画像とファイル」にチェック→全期間)
  • サーバー側で W3 Total Cache や WP Super Cache などのキャッシュプラグインを使っている場合は、管理画面から「全キャッシュを削除」する
  • Cloudflare などの CDN を利用している場合は、ダッシュボードでキャッシュをパージする
  • 一部のレンタルサーバーで提供される独自キャッシュ機能もオフにする

セーフモードでプラグインの競合を切り分ける

ここまでの手順で解決しない場合、WordPress 内部で JavaScript の競合が起きている。特定のプラグインやテーマが、WordPress 本体がバンドルしている React とは別バージョンの React を読み込んでいたり、jQuery の古いバージョンや別の JavaScript ライブラリを強制的に読み込んでいるケースが多い。

全プラグインを一度に無効化すると管理画面まで影響が出る操作もあるため、WordPress のトラブルシューティングモード(Health Check & Troubleshooting プラグイン)を使うのが安全だ。このプラグインをインストールして有効化すると、管理画面のツールバーに「トラブルシューティングモード」ボタンが現れる。これを押すと、自分だけに影響するセッションで、すべてのプラグインが無効化され標準テーマに切り替わった状態でエディタをテストできる。他の訪問者には通常通りのサイトが表示される。

トラブルシューティングモードでエディタが正常に動けば、原因はプラグインかテーマにある。次にプラグインをひとつずつ有効化していき、どのプラグインを有効にした瞬間に点滅が再発するかを特定する。Health Check プラグインが使えない環境では、本番に近いテスト環境(ステージング)を作って同じ手順を行う。

テーマを標準テーマに切り替える

有料テーマやカスタマイズの多いテーマは、独自のページビルダーやアニメーションライブラリを読み込んでいることがある。プラグインをすべて無効化しても直らない場合、テーマが原因の可能性が高い。一時的に Twenty Twenty-Five などの標準テーマに切り替え、エディタの点滅が止まるか確認する。

テーマを切り替えるとウィジェットやメニュー構成が変わる可能性があるため、先にサイトのバックアップを取ることを推奨する。点滅がテーマに起因していた場合は、テーマの開発元に getComputedStyle エラーの情報を添えて問い合わせるか、子テーマで競合するスクリプトの読み込みを停止させる。

点滅エラーの詳細を開発者ツールで特定する方法

点滅エラーの詳細を開発者ツールで特定する方法

どうしても原因がわからない場合や、特定のプラグインをどうしても無効化できない事情がある場合は、ブラウザの開発者ツールで詳細なエラー情報を収集する。

  • Chrome で F12 キー(開発者ツール)を開き、「Console」タブを確認する
  • 赤いエラーメッセージの右に表示される「ソース」のリンクをクリックすると、エラーが発生している JavaScript ファイルと行番号が表示される
  • ファイルパスに /wp-content/plugins/プラグイン名//wp-content/themes/テーマ名/ が含まれていれば、そのプラグインまたはテーマがエラーの発生源だ
  • 「Network」タブで、404 エラー(Not Found)になっている .js ファイルがないかも確認する。ファイルの読み込みに失敗していると、依存する React の処理が途中で止まりクラッシュする

これらの情報を、原因と思われるプラグインやテーマのサポートフォーラムに提出すれば、開発者側での修正も期待できる。エラーメッセージを丸ごとコピーして伝えるとスムーズだ。

それでも直らない時の一時的な回避策

それでも直らない時の一時的な回避策

納期が迫っていてどうしても編集を進めなければならない場合、以下の回避策で作業を継続できる。

コードエディタで直接編集する

ビジュアルエディタが使えなくても、ブロックエディタの右上の三点メニューから「コードエディタ」に切り替えれば、HTML ベースでブロックの内容を編集できる。ビジュアルのプレビューは見られないが、少なくとも点滅に悩まされずにテキストの修正やブロック構造の調整は可能だ。

クラシックエディタプラグインを一時的に有効化する

Classic Editor プラグインをインストールして有効化すると、旧来のクラシックエディタで記事を編集できる。点滅の原因がブロックエディタ固有の React 処理にある場合、クラシックエディタでは問題が発生しないことが多い。作業が完了したらプラグインを無効化して元のブロックエディタに戻し、根本原因の調査を続ける。

よくある質問

同じブラウザで他の WordPress サイトは正常に動く。自サイトだけ点滅するのはなぜか

自サイトのプラグインまたはテーマが読み込んでいる JavaScript が原因だ。他の WordPress サイトが正常なのは、そのサイトでは問題のスクリプトが読み込まれていないからだ。「セーフモードでプラグインの競合を切り分ける」手順で原因のプラグインやテーマを特定する。

getComputedStyle エラーは WordPress のバージョンを戻せば直るか

バージョンを戻すことで一時的に直るケースはあるが、セキュリティ更新が適用されなくなるため推奨しない。WordPress 本体には問題がなく、特定のプラグインやテーマが新しい WordPress のバンドル済み React に対応していないことがほとんどだ。プラグインやテーマの更新を待つか、開発元に報告して対応を依頼する方が安全だ。

ブラウザのハードウェアアクセラレーションは関係あるか

ごくまれに、GPU レンダリングの不具合が画面の点滅を引き起こすことがある。Chrome の設定→システム→「ハードウェア アクセラレーションが使用可能な場合は使用する」をオフにして再起動すると直るケースも報告されている。ただし、getComputedStyle エラーを伴う場合は JavaScript の競合が原因の可能性が高い。

全プラグイン無効化と標準テーマでも直らない場合はどうするか

ここまで試しても直らない場合は、WordPress 本体のファイル破損やサーバー側の特異な設定(mod_security など)が影響している可能性がある。WordPress の再インストール(「ダッシュボード→更新」から「再インストール」を実行)を試す。それでもダメならサーバーのエラーログを確認し、PHP のメモリ制限や実行時間制限が不足していないかも調べる。

エラーのスタックトレースにプラグイン名が出ていない時はどう調べるか

エラーが react-dom.min.jscomponents.min.js で発生している場合、直接の原因箇所がミニファイされた WordPress 本体のファイルになっている。この場合は「Network」タブで、読み込まれているすべての .js ファイルを確認する。プラグインが読み込むスクリプトの数が多い順に疑い、ひとつずつ無効化して切り分ける。

この記事のポイント

  • ブロックエディタの点滅と getComputedStyle エラーの主因はブラウザ拡張機能と JavaScript 競合
  • シークレットウィンドウと拡張機能無効化で素早く原因を絞り込める
  • Health Check プラグインのトラブルシューティングモードで安全にプラグインを切り分ける
  • どうしても急ぐ場合はコードエディタや Classic Editor プラグインで一時的に編集を続行できる
Bricks Builderのカスタムコードで同意管理プラグインが効かない時の直し方

Bricks Builderのカスタムコードで同意管理プラグインが効かない時の直し方

Kanslieri Cookie ConsentでGoogle AnalyticsやMicrosoft Clarityを自動ブロックする設定にしているのに、シークレットウィンドウで計測タグが動いてしまう原因は、Bricks Builderのカスタムコード欄に直書きしたスクリプトを、同意管理プラグインが認識できない仕組みにある。スクリプトを手動ブロック用の属性に書き換えるか、WordPress標準のエンキュー方式に差し替えれば、同意前の計測を確実に止められる。

なぜBricksカスタムコードの計測タグがブロックされないのか

なぜBricksカスタムコードの計測タグがブロックされないのか

Kanslieri Cookie Consentをはじめ、多くのCookie同意管理プラグインは、WordPressの標準機能であるwp_enqueue_scriptで読み込まれたスクリプトをフックして制御する設計になっている。スクリプトのハンドル名を解析し、同意が得られるまで実行を自動的に保留する仕組みだ。

一方、Bricks Builderの「Settings → Custom Code → Header Scripts」に貼り付けたコードは、テーマがwp_headアクションを通じてページのソースにそのまま埋め込む。プラグイン側からは「PHPで読み込まれたスクリプト」として認識されず、単なるインラインHTML扱いになる。その結果、管理画面のScript Blockingページに「Google Analyticsは自動ブロック対象」と表示されていても、実際にはブロックが効かない。

Google Analyticsの_ga_gidといったCookieがシークレットウィンドウで生成され、/g/collectへのリクエストが送信され、page_viewscrollイベントが記録されるのはこのためだ。Microsoft Clarityも同様に、カスタムコード欄経由では自動ブロックの対象外になる。

同意前のトラッキングを防ぐ具体的な修正手順

同意前のトラッキングを防ぐ具体的な修正手順

Kanslieri Cookie Consentの自動ブロックが効かない場合でも、手動ブロックの仕組みを利用すれば計測を止められる。修正方法は大きく2つある。すでにカスタムコードを使っているなら、スクリプトタグに手動ブロック用の属性を追加するのが最も手早い。

手動ブロック用のtype属性に書き換える方法

Kanslieri Cookie Consentは、スクリプトタグのtype属性をtext/plainに書き換えることで、同意があるまでスクリプトの実行を止める仕組みを持っている。同意が得られた時点で、プラグインがtypetext/javascriptに戻して実行する。Bricksのカスタムコード欄に貼ってあるGoogle AnalyticsとMicrosoft Clarityのコードを、次のように修正する。

修正前
<script async src="https://www.googletagmanager.com/gtag/js?id=G-XXXXXXXXXX"></script>
<script>
  window.dataLayer = window.dataLayer || [];
  function gtag(){dataLayer.push(arguments);}
  gtag('js', new Date());
  gtag('config', 'G-XXXXXXXXXX');
</script>
修正後
<script async src="https://www.googletagmanager.com/gtag/js?id=G-XXXXXXXXXX" type="text/plain" data-cookiecategory="analytics"></script>
<script type="text/plain" data-cookiecategory="analytics">
  window.dataLayer = window.dataLayer || [];
  function gtag(){dataLayer.push(arguments);}
  gtag('js', new Date());
  gtag('config', 'G-XXXXXXXXXX');
</script>
修正前(自動ブロック非対応)  修正後(手動ブロック対応)

ポイントは各<script>タグにtype="text/plain"data-cookiecategory="analytics"を追加することだ。data-cookiecategoryの値は、Kanslieri Cookie Consentの設定で該当スクリプトを割り当てたいカテゴリ名と一致させる。Google Analyticsならanalytics、Microsoft Clarityも同じ分析カテゴリで構わない。複数カテゴリにまたがる場合はdata-cookiecategory="analytics, marketing"のようにカンマ区切りで指定できる。

WordPressのエンキュー方式に切り替える方法

より根本的な解決策として、カスタムコード欄ではなく子テーマのfunctions.phpからwp_enqueue_scriptでスクリプトを読み込む方法もある。この方法なら、Kanslieri Cookie Consentの自動ブロック機能が確実に働く。

function my_google_analytics_script() {
    wp_enqueue_script(
        'google-analytics',
        'https://www.googletagmanager.com/gtag/js?id=G-XXXXXXXXXX',
        array(),
        null,
        false
    );
    wp_add_inline_script(
        'google-analytics',
        "window.dataLayer = window.dataLayer || [];
        function gtag(){dataLayer.push(arguments);}
        gtag('js', new Date());
        gtag('config', 'G-XXXXXXXXXX');"
    );
}
add_action('wp_enqueue_scripts', 'my_google_analytics_script');

このコードを子テーマのfunctions.phpに追加したら、Bricksのカスタムコード欄から該当のコードを削除する。Kanslieri Cookie ConsentのScript BlockingページでGoogle Analyticsが認識されるようになり、同意前のトラッキングが自動的にブロックされる。

手動ブロックが正しく動くか確認する手順

手動ブロックが正しく動くか確認する手順
STEP 1 ブラウザのシークレットウィンドウを開く(Cookieが初期化された状態)
STEP 2 サイトにアクセスし、Cookie同意バナーが表示されたら同意せずに待つ
STEP 3 Chrome DevToolsの「Application → Cookies」で_gaや_gidが生成されていないことを確認
STEP 4 「Network」タブでgoogle-analytics.comやclarity.msへのリクエストが発生していないことを確認

DevToolsのNetworkタブでは、フィルタにcollectclarityと入力すると該当リクエストを素早く見つけられる。同意前にこれらのリクエストが記録されていなければ、ブロックは正しく機能している。その状態でCookieバナーの「同意する」をクリックし、直後にリクエストが走り始めれば、同意後の計測も正常に動作していることになる。

Bricks Builderのキャッシュが有効になっている場合は、修正後にかならずキャッシュをクリアする。Bricksの管理画面から「Bricks → Settings → Performance」でキャッシュを削除したうえで、サーバー側のキャッシュやCDNがある場合も同時にパージする。キャッシュが残っていると修正前のスクリプトが配信され続けてしまうため、確認作業の前に忘れずに行う必要がある。

よくある質問

他のページビルダー(ElementorやDivi)でも同じ問題は起きるのか

起きる可能性が高い。Elementorのカスタムコード機能やDiviの統合設定から追加したスクリプトも、テーマ側で直接HTMLに出力されるため、同意管理プラグインの自動ブロック対象外になりやすい。同じ手動ブロックの手法が適用できる。ただし、Elementorの場合はwp_enqueue_script方式に切り替える方が推奨される場面が多い。カスタムコード欄にスクリプトを置く運用は、同意管理の観点からは避けるのが無難だ。

Kanslieri Cookie Consentの自動ブロックが効かないスクリプトを見分ける方法はあるか

管理画面の「Script Blocking」ページに一覧表示されるスクリプトは、プラグインが自動検出できたものだけだ。ここに表示されていないGoogle AnalyticsやClarityのスクリプトは自動ブロック対象外と判断してよい。また、シークレットウィンドウで実際にCookieが生成されるか、DevToolsでネットワークリクエストが発生するかを確認すれば、ブロックの可否を実動作で検証できる。

手動ブロックに書き換えたスクリプトが、同意後も動かない場合はどうするのか

Kanslieri Cookie Consentの設定で、data-cookiecategoryに指定したカテゴリが有効になっているか確認する。「Cookie Settings」画面で該当カテゴリのトグルがオンになっていること、同意バナーでユーザーがそのカテゴリを許可できる選択肢が表示されていることをチェックする。カテゴリ名にタイプミスがあると、プラグインがスクリプトをどのカテゴリに紐づけてよいか判断できず、同意後も実行されない。

Bricksのカスタムコードは使わず、Google Site KitプラグインでGA4を入れるとどうなるか

Site Kitはwp_enqueue_scriptを使ってGoogle Analyticsタグを読み込むため、Kanslieri Cookie Consentの自動ブロック機能が正常に働く。手動ブロックの書き換えは不要になる。すでにカスタムコードでGA4を入れている場合は、そのコードを削除してSite Kitに移行するだけで、同意管理の課題が解決する。Clarityも公式プラグインを使えば同様だ。

この記事のポイント

  • Bricks Builderのカスタムコード欄は同意管理プラグインの自動ブロック対象外になる
  • スクリプトタグにtype="text/plain"とdata-cookiecategoryを追加して手動ブロックに対応させる
  • wp_enqueue_scriptで読み込めば自動ブロックが有効になり修正不要
  • 修正後はシークレットウィンドウとDevToolsでCookieとリクエストを検証する
  • キャッシュクリアを忘れると修正が反映されない
プラグイン更新後に管理画面が真っ白になった時の原因と直し方

プラグイン更新後に管理画面が真っ白になった時の原因と直し方

このエラーはプラグイン開発側の不具合によるものだ。FTP やレンタルサーバーのファイルマネージャーで当該プラグインフォルダを一時的にリネームすれば、管理画面へ再びログインできるようになる。

プラグイン更新後に「重大なエラー」でログイン不能になる原因

今回の事象は「protect-login」1.5.0 へのアップデート後に起きている。エラーログを確認すると「Uncaught TypeError」とあり、ある関数が文字列を期待しているのに配列が渡されたためにスクリプトが停止した。このような PHP の型不整合は、プラグイン内部のロジック変更やテスト不足で起こりやすい。WordPress は致命的エラーが発生すると「このサイトで重大なエラーが発生しました」と表示し、管理画面へのアクセスも遮断する仕組みだ。

エラー発生前後の状態
Before(エラー発生)
プラグイン更新後、ログイン画面で「このサイトで重大なエラーが発生しました」と表示され管理画面に入れない
After(プラグイン無効化後)
問題のプラグインが無効化され、管理画面へ通常通りアクセスできる
エラー状態  復旧後

管理画面に入れない状態からプラグインを無効化する手順

管理画面に入れない状態からプラグインを無効化する手順

管理画面が完全に使えなくても、サーバー上のファイルを直接操作すればプラグインを無効化できる。FTP クライアントの接続情報がわからないケースも多いため、多くのレンタルサーバーが提供する「ファイルマネージャー」機能を使うのが最も現実的だ。

ファイルマネージャー操作の流れ
STEP 1 サーバー管理画面にログインする
STEP 2 ファイルマネージャーで /wp-content/plugins/ に移動する
STEP 3 問題のプラグインフォルダを「protect-login_off」などにリネームする
STEP 4 管理画面にログインできることを確認する

ファイルマネージャーでプラグインフォルダをリネームする

レンタルサーバーの管理画面で「ファイルマネージャー」や「FTP ツール」と呼ばれる機能を開く。WordPress をインストールしたディレクトリに移動し、wp-contentplugins と進む。今回の事例では「protect-login」というフォルダが該当するが、任意のプラグイン更新後に同様の事態になった場合は、最後に更新したプラグインのフォルダ名を探す。

該当フォルダ名を右クリックし「名前の変更」で末尾に「_bak」や「_off」を付加する。たとえば「protect-login」を「protect-login_bak」に変えるだけで、WordPress はそのプラグインを読み込まなくなる。これで致命的エラーが解消され、管理画面へ再びアクセスできる。

FTP 接続情報が手元にある場合の操作

FTP クライアント(FileZilla や Cyberduck など)にホスト名やユーザー名、パスワードを設定して接続できるなら、同様に /wp-content/plugins/ に移動し、問題のフォルダをリネームする。FTP のほうがファイル操作は素早いが、接続情報が不明な場合はサーバー管理画面のファイルマネージャーを使う手順で問題ない。

復旧後に原因プラグインをどう扱うか

復旧後に原因プラグインをどう扱うか

プラグイン開発者の修正状況を確認する

管理画面にログインできたら、WordPress の「プラグイン」一覧で問題のプラグインは「無効化」状態で表示される。開発者が修正版をリリースしているかどうかを、WordPress.org のプラグインページや開発者の公式サイトで確認する。今回の事例でも、開発者から「同日中に修正を配布する」というアナウンスが出ている。修正が確認できたら、プラグインを最新版に更新してから再度有効化を試みる。

以前のバージョンに戻す方法

プラグインの「開発版」タブや公式 SVN リポジトリから旧バージョンの ZIP をダウンロードし、手動でアップロードし直す方法もある。具体的には、WordPress.org の該当プラグインページ下部にある「以前のバージョン」セクションから、安定していたバージョンを選んでダウンロードする。管理画面の「プラグイン」→「新規追加」→「プラグインのアップロード」から ZIP を選んでインストールし、既存のプラグインを上書きできる。

代替プラグインへの切り替えを検討する

問題のプラグインが長期間修正されない、あるいは開発が停滞している場合は、同様の機能を持つ別のプラグインを検討する。ログイン試行制限機能であれば「Limit Login Attempts Reloaded」や「Wordfence Security」のログイン保護モジュールなど、更新が継続的で評価の高い選択肢が存在する。

同様のトラブルを未然に防ぐ運用のポイント

同様のトラブルを未然に防ぐ運用のポイント

ステージング環境で事前テストする

本番サイトに直接プラグイン更新を適用する前に、ステージング環境(複製サイト)を用意して動作確認する習慣を持つと、致命的なエラーでサイトが停止するリスクを回避できる。多くの国内レンタルサーバーはワンクリックでステージングを作成する機能を備えている。

自動アップデートの対象を絞る

WordPress にはプラグインごとに自動アップデートを有効・無効にする設定がある。重要なプラグインほど、メジャーアップデートが行われるタイミングを自分でコントロールし、更新直後はサイトの状態を確認できるスケジュールを組むと安全だ。

定期的なバックアップの重要性

万が一、プラグインのリネームでは復旧できないほど深刻な不具合が起きた場合、最新のバックアップがあればサイト全体を以前の状態に戻せる。UpdraftPlus や BackWPup などのプラグインで、データベースとファイルを定期的にバックアップし、サーバー外のクラウドストレージに保存しておく。

よくある質問

エラーメッセージをメールで受け取るにはどうすればいいか

WordPress の管理画面にすら入れない状況では、サーバー側のエラーログを確認するか、WordPress の wp-config.php にデバッグモードを設定してログファイルに出力させる方法がある。define('WP_DEBUG', true);define('WP_DEBUG_LOG', true); を追記すると、/wp-content/debug.log に詳細が記録される。

プラグインフォルダを削除しても問題ないか

削除でも無効化は可能だが、リネームのほうが安全だ。削除するとプラグインの設定データがデータベースに残るかどうかはプラグイン次第で、完全に消えるケースもある。リネームしておけば、修正版がリリースされたときに元の名前に戻すだけで設定を維持したまま再度使い始められる。

「このサイトで重大なエラーが発生しました」という表示を訪問者に見せない方法はあるか

WordPress 5.2 以降、致命的エラーが発生するとこのメッセージが表示される。管理者には回復モードへのリンクが入ったメールが送信される仕組みだが、メールが届かない場合もある。根本的には、エラーそのものを発生させないことと、前述のファイル操作による迅速な復旧が最も重要だ。

更新前に自動でバックアップを取る方法はあるか

プラグイン「UpdraftPlus」のプレミアム版や「BlogVault」は、WordPress のコアやプラグイン更新の直前に自動でサイト全体をバックアップする機能を持っている。更新後に問題が発生しても、管理画面から数クリックで直前の状態に復元できるようになる。

レンタルサーバーのファイルマネージャーが見当たらない場合の対処法

契約しているサーバー会社の管理画面(cPanel や独自パネル)に「ファイルマネージャー」がない場合でも、「FTP アカウント」セクションから接続情報を作成し、PC の FTP クライアントで接続できる。どうしてもわからなければサーバー会社のサポートに問い合わせて、WordPress のプラグインを手動で無効化したいと伝えれば手順を案内してもらえることが多い。

この記事のポイント

  • プラグイン更新後の致命的エラーは、サーバー上のファイル操作でプラグインを無効化すれば即座に復旧できる
  • ファイルマネージャーや FTP で /wp-content/plugins/ 内の該当フォルダをリネームする
  • 復旧後は開発者の修正状況を確認し、安全を確かめてからプラグインを再び有効化する
  • 日頃からステージングテストやバックアップを習慣化し、自動アップデートの対象を絞っておく
Kadence Blocksでエディタのフォントがセリフ体になる原因と直し方

Kadence Blocksでエディタのフォントがセリフ体になる原因と直し方

Kadence Blocks の Advanced Typography で Google Fonts を選択したにもかかわらず、ブロックエディタ上でセリフ体のフォールバックフォントが表示される問題は、Kadence Blocks 3.7.3 以降のエディタ内フォント読み込み処理の変更に起因する。フロントエンドで正しく表示されているのであれば、エディタ側の設定やバージョン調整で解決できる。

なぜエディタ内だけ Google Fonts が正しく表示されないのか

なぜエディタ内だけ Google Fonts が正しく表示されないのか

Kadence Blocks の Advanced Typography は、サイトのフロントエンドとブロックエディタの両方に選択したフォントを読み込む仕組みになっている。しかしバージョン 3.7.3 以降、エディタ画面でのフォント読み込みパスや enqueue のタイミングに変更が入り、特定の環境下で Google Fonts のスタイルシートが正しく適用されなくなった。

実際の症状として、例えば Roboto を指定したのにエディタ上では明朝体や Times New Roman 系のセリフ体で表示される。これはブラウザが指定されたフォントを見つけられず、システムのデフォルトフォントにフォールバックしている状態だ。フロントエンドでは Kadence Theme 側のフォント読み込み処理が正常に機能するため問題が表面化しない。

この問題はプラグインの競合ではなく、Kadence Blocks 単体のエディタ向けフォント読み込み処理に起因する。そのため全プラグインを無効化しても再現し、標準テーマに切り替えても改善しない場合がある。

Kadence のフォント設定を確認して対処する

Kadence のフォント設定を確認して対処する

「外観」→「カスタマイズ」でフォントキャッシュを削除する

Kadence Theme には、Google Fonts のローカルキャッシュを管理する機能が組み込まれている。このキャッシュが破損していたり古い情報を保持していると、エディタで正しいフォントが読み込まれないことがある。

  1. WordPress 管理画面の「外観」→「カスタマイズ」を開く
  2. 「General」→「Performance」へ進む
  3. 「Google Fonts」セクションにある「Clear Font Cache」ボタンをクリックする
  4. カスタマイザーを保存して閉じ、ブロックエディタをリロードする

この操作で Kadence が保持していたフォント情報がクリアされ、次回エディタを開いた際に最新のフォントファイルが再取得される。キャッシュクリア後も改善しない場合は、次の手順に進む。

「Google Fonts の読み込み方法」を切り替える

Kadence は Google Fonts の読み込み方式を複数用意している。設定によってエディタ側のフォント描画に影響が出るため、別の方式に変更して検証する。

  • 「外観」→「カスタマイズ」→「General」→「Performance」→「Google Fonts」を開く
  • 「Load Method」を現在とは別のオプションに切り替える(例: 「Local」から「CDN」へ、またはその逆)
  • 保存後にブロックエディタを再読み込みしフォント表示を確認する

ローカル読み込み(Local)に設定すると、Google のサーバーからフォントをダウンロードして自サイト内に保存する。CDN 読み込みでは Google の配信網から直接フォントを取得する。サーバー環境やセキュリティ設定によっては、ローカル読み込み時のファイル生成に失敗してエディタ側のフォントが欠落することがある。

Advanced Typography のエディタ向け設定を確認する

Kadence Blocks のブロック設定パネルにある Advanced Typography には、エディタ内プレビュー用のフォント読み込みを制御する内部フラグが存在する。設定画面から直接変更できる項目ではないが、次の操作でリセットできる。

  1. 問題が発生しているブロックを選択し、右サイドバーの「Advanced」→「Typography」を開く
  2. フォント選択を一度「Default / Inherit」に戻し、保存する
  3. ページをリロードしたあと、再度目的の Google Fonts を選択し直す

これにより Kadence Blocks がエディタ向けにフォントを再登録し、正しいスタイルシートが読み込まれるようになる場合がある。

Before: セリフ体で表示される
見出しテキスト
エディタ上で Roboto を選択しているのに明朝体で表示されている
After: 選択した Google Fonts で表示される
見出しテキスト
Roboto が正しく適用され、フロントエンドと同じ見た目になった
セリフ体にフォールバック  Google Fonts が正常表示

上記のデモはエディタ画面内でのフォント描画の違いを表したものだ。修正後はフロントエンドと同じフォントがエディタでも適用される。

Kadence Blocks のバージョンを変更して問題を回避する

Kadence Blocks のバージョンを変更して問題を回避する

バージョン 3.7.2 にダウングレードする手順

この問題は Kadence Blocks 3.7.3 以降で発生し、3.7.2 では起こらないことが確認されている。どうしてもエディタ内のフォント表示を正しく保ちたい場合、一時的に 3.7.2 へ戻すのが確実な回避策になる。ただしダウングレードはセキュリティ面で推奨されないため、次のアップデートで修正されるまでの応急処置と割り切る。

  1. 管理画面の「プラグイン」→「プラグインの追加」→「プラグインのアップロード」ボタンをクリックする
  2. Kadence Blocks の旧バージョン(3.7.2)の ZIP ファイルをアップロードする
  3. 「現在のプラグインをアップロードしたものに置き換えますか?」という確認で「はい」を選択する
  4. プラグインが上書きされたら、必ず「自動更新を無効化」して意図しないアップデートを防ぐ

旧バージョンの ZIP ファイルは、WordPress.org のプラグインページにある「Advanced View」→「Previous Versions」からダウンロードできる。上書きインストール後はブロックエディタを再読み込みし、フォント表示が正常に戻ったか確認する。

アップデートで修正されたかを定期的に確認する

Kadence Blocks は更新頻度が高いプラグインのため、数週間以内にこの問題が修正された新バージョンがリリースされる可能性がある。ダウングレードした状態でも、WordPress 管理画面の「プラグイン」ページや Kadence の公式チェンジログを定期的にチェックし、修正版が公開されたら速やかに最新版へ更新する。

手動でエディタ用スタイルを補完する方法

手動でエディタ用スタイルを補完する方法

子テーマの editor-style.css でフォントを明示する

Kadence のエディタ内フォント読み込みが不安定な場合、子テーマにエディタ専用のスタイルシートを用意し、使用する Google Fonts を直接指定する方法が有効だ。これは Kadence の処理に依存せず、WordPress 標準の仕組みでエディタにフォントを読み込ませる。

/* 子テーマの functions.php に追加 */
function my_editor_styles() {
    add_theme_support( 'editor-styles' );
    add_editor_style( 'editor-style.css' );
}
add_action( 'after_setup_theme', 'my_editor_styles' );

/* 子テーマ直下の editor-style.css */
@import url('https://fonts.googleapis.com/css2?family=Roboto:wght@400;700&display=swap');

.editor-styles-wrapper {
    font-family: 'Roboto', sans-serif;
}

このコードにより、ブロックエディタの読み込み時に指定した Google Fonts が強制的に適用される。Kadence 側のフォント読み込み処理が失敗しても、エディタ上では正しいフォントが表示されるようになる。ただし、この方法はサイト全体に適用されるため、ページやブロックごとに異なるフォントを使い分けている場合は注意が必要だ。

Kadence のフィルターフックでエディタ用フォントを追加する

よりピンポイントに Kadence Blocks のエディタ向けフォント読み込みを補強したい場合、Kadence が提供するフィルターフックを利用する。次のコードを子テーマの functions.php に追加することで、エディタ用のフォントスタイルをプログラム的に挿入できる。

add_action( 'enqueue_block_editor_assets', function() {
    wp_enqueue_style(
        'custom-editor-fonts',
        'https://fonts.googleapis.com/css2?family=Roboto:wght@400;700&display=swap',
        [],
        null
    );
}, 99 );

このフックはブロックエディタが読み込まれるタイミングで実行され、優先度 99 で登録することで Kadence の内部処理より後にスタイルを追加する。結果として、Kadence が読み込みに失敗した場合でも確実にエディタ上で Google Fonts が利用可能になる。

よくある質問

フロントエンドでは正しく表示されるのにエディタだけおかしいのはなぜか

Kadence Blocks はフロントエンドとエディタで別々のフォント読み込み処理を行っている。フロントエンドは Kadence Theme の仕組みが、エディタは Kadence Blocks の仕組みが担当しており、後者の処理に不具合があるとエディタ内だけでフォントが崩れる。表示確認の際は必ず両方の環境を見比べることが大切だ。

キャッシュを削除しても直らない場合はどうすればよいか

Kadence のフォントキャッシュクリアで改善しない場合、ブラウザキャッシュやサーバー側のキャッシュ(CDN やキャッシュプラグイン)もすべて削除する。その後も直らなければ、Kadence Blocks のバージョンを 3.7.2 にダウングレードするか、前述の editor-style.css による手動補完を検討する。

特定の Google Fonts だけがエディタで表示されないのはなぜか

フォントのウェイト数が多いものや可変フォント(Variable Fonts)は、Kadence のエディタ向け読み込み処理が対応しきれずに欠落することがある。この場合、問題のフォントを Kadence の「Custom Fonts」機能で手動アップロードするか、前述のフィルターフックで直接 Google Fonts の URL を指定すると安定する。

Kadence Blocks のバージョンを下げると他の機能に影響はあるか

3.7.2 へのダウングレードでは、3.7.3 以降に追加された新機能やバグ修正が失われる。具体的にはブロックの追加オプションやパフォーマンス改善が適用されない。ただし、基本的なブロック編集機能やフロントエンド表示には大きな影響は出ない。ダウングレードはあくまで応急処置として考え、修正版のリリースを待つ姿勢が安全だ。

別のテーマに切り替えたらエディタでフォントが表示されるようになった

Kadence Theme を無効化して別のテーマにすると、エディタ内のフォント管理がそのテーマ側に移るため問題が解消されることがある。これは根本的な解決ではなく、Kadence Blocks と Kadence Theme の組み合わせ特有の不具合であることを示している。テーマを変更できない場合は、やはり前述のコードによる手動補完が現実的な対処になる。

この記事のポイント

  • Kadence Blocks 3.7.3 以降のエディタ向けフォント読み込み処理に不具合があり、セリフ体にフォールバックする
  • 「外観」→「カスタマイズ」のフォントキャッシュクリアと読み込み方式の切り替えで改善する可能性がある
  • 一時的な回避策として Kadence Blocks を 3.7.2 にダウングレードする方法がある
  • 子テーマの editor-style.css やフィルターフックでエディタ用フォントを手動補完すると確実に表示できる
  • 修正版がリリースされたら速やかに最新バージョンへ更新することが重要
WooCommerce HPOSが48時間で100万件以上のアクションスケジューラ完了ジョブを生成した原因と対処法

WooCommerce HPOSが48時間で100万件以上のアクションスケジューラ完了ジョブを生成した原因と対処法

WooCommerceサイトでデータベースサイズが突然急増し、wp_actionscheduler_actionsテーブルに数百万件もの完了済みジョブが蓄積している場合、HPOSデータ同期バッチプロセスが無限ループを起こしている可能性が極めて高い。ここでは症状の見分け方から原因の特定、停止、クリーンアップまで、具体的な手順をまとめる。

HPOS関連のデータベース肥大化が疑われる症状

HPOS関連のデータベース肥大化が疑われる症状

以下のような兆候が複数同時に現れたら、Action Schedulerの暴走を疑ってよい。

  • データベース容量が短時間で急激に増加する(数GB単位)
  • PHPエラーログのファイルサイズが異常に大きくなる
  • データベースのロックエラーやデッドロックが頻発する
  • 管理画面やフロントエンドで「INSERT command denied」などのエラーが出る
  • サーバーのバックグラウンドプロセスがほぼ常時稼働し続ける
  • 注文件数が数百件なのにAction Schedulerテーブルだけが肥大化している

これらの症状は、単体では他の原因もあり得るが、データベース内の完了ジョブが異常に増えている点が最大の特徴だ。

正常時(Before)
wp_actionscheduler_actions テーブルに数百件程度のジョブが存在する
暴走時(After)
100万件以上の完了ジョブが蓄積し、データベース全体が膨張する
正常時  暴走時

Action Schedulerが暴走していないか確認する方法

Action Schedulerが暴走していないか確認する方法

まずはデータベースを直接調べ、どのジョブが何件蓄積しているかを確かめる。WP-CLIが使えるならコマンドラインから、そうでなければphpMyAdminやAdminerで以下のクエリを実行する。

STEP 1 Action Schedulerテーブルの完了ジョブ数を集計する
STEP 2 フック名「wc_run_batch_process」でフィルタし、引数を確認する
STEP 3 注文件数とジョブ件数を比較し、異常な乖離を確認する
STEP 4 実行中のジョブが1件完了するたびに次が即座にスケジュールされるループを特定する

完了ジョブの数とフック名を調べる

データベースに直接問い合わせる場合、以下のSQLで完了状態のジョブをフック名別に集計できる。

SELECT hook, COUNT(*) AS cnt
FROM wp_actionscheduler_actions
WHERE status = 'complete'
GROUP BY hook
ORDER BY cnt DESC
LIMIT 10;

ここで wc_run_batch_process の件数が数十万〜数百万件と突出していれば、疑いは濃厚だ。

引数(args)から発行元を特定する

次に、そのフックの引数を見る。例えば以下のクエリで先頭の数件を取得する。

SELECT action_id, args, scheduled_date_gmt
FROM wp_actionscheduler_actions
WHERE hook = 'wc_run_batch_process'
AND status = 'complete'
ORDER BY action_id DESC
LIMIT 5;

引数フィールドにはシリアライズされたデータが入っている。その中に Automattic\WooCommerce\Internal\DataStores\Orders\DataSynchronizer という文字列が含まれていれば、HPOSのデータ同期機構がバッチを発行している証拠だ。

注文件数との比較で異常を確信する

管理画面のWooCommerce → 注文で表示される注文の総数は、データベースの wp_posts(またはHPOS有効時は wp_wc_orders)で確認できる。注文が600件しかないのに、同期バッチの完了ジョブが100万件もあるなら、明らかにループが発生している。

動作中のループをリアルタイムで観察する

WP-CLIが利用可能なら、以下のコマンドでペンディング状態のジョブを監視する。

wp action-scheduler list --hook=wc_run_batch_process --status=pending

定期的に実行すると、常に1件だけ存在し、それが完了するとすぐに新たなペンディングが生まれるパターンが観測できるはずだ。これはキューが滞留しているのではなく、バッチ自身が次をスケジュールし続ける無限ループであることを示す。

なぜHPOS DataSynchronizerが無限ループを起こすのか

なぜHPOS DataSynchronizerが無限ループを起こすのか

HPOS(High-Performance Order Storage)を有効にすると、WooCommerceは注文データを従来の wp_posts テーブルから専用テーブルへ移行する。この移行やデータの同期を担うのが DataSynchronizer であり、バックグラウンドでバッチ処理を走らせる。

通常は同期が完了すればバッチは停止するが、何らかの設定不整合やエラーにより「同期が完了したと見なされず、次のバッチが即座に予約される」状態に陥ることがある。具体的には、各バッチが「保留中 → 完了 → 次バッチ予約」というサイクルを際限なく繰り返す。注文数が少なくても、このループによってAction Schedulerのテーブルだけが急激に肥大化し、データベース全体を圧迫する。

保留中(Pending)
完了(Complete)
次バッチ予約(Schedule Next)
再び 保留中(Pending)へ
↑ 無限にループする

このループが起きているかどうかは、データベースを直接見るまで気づきにくい。キャッシュやRedis、WP Rocketなどを最初に疑いがちだが、真因はAction Schedulerの中にある。

データベースの安静化とクリーンアップの手順

データベースの安静化とクリーンアップの手順

原因がHPOSの同期バッチループと判明したら、ループを止め、完了ジョブを削除し、再発を防ぐ。以下の手順を順に実行する。

STEP 1 WP-CLIで同期状態を確認し、必要に応じて同期をリセットする
STEP 2 Action Schedulerの完了ジョブを安全に一括削除する
STEP 3 データベーステーブルを最適化し、容量を解放する
STEP 4 再発防止のためにHPOS設定を見直す

同期状態のリセット

まず、現在のHPOS同期状況を確認する。WP-CLIで次のコマンドを実行する。

wp wc hpos sync status

ここで「status: in-progress」や「pending」が表示される場合、同期が完了しておらず、バッチが動き続けている可能性がある。強制的にリセットし、不要な同期を停止するには以下を実行する。

wp wc hpos sync reset

リセット後、再度ステータスを確認し「idle」や「complete」になっていれば、新たなバッチはスケジュールされなくなる。

完了ジョブの一括削除

100万件単位の完了ジョブを削除するには、Action Schedulerが提供するWP-CLIコマンドを使うのが安全で高速だ。以下のコマンドで、完了状態のジョブをすべて削除できる。

wp action-scheduler clean --status=complete

特定のフックのみを削除したい場合は、プレーンなSQLで一度に削除してもよいが、必ず事前にデータベース全体のバックアップを取ること。

DELETE FROM wp_actionscheduler_actions
WHERE hook = 'wc_run_batch_process' AND status = 'complete';

さらに、関連するログテーブル(wp_actionscheduler_logs)の不要レコードも合わせて削除すると、ディスク容量を大きく回復できる。ただし、こちらは慎重に扱う必要があるため、まずは完了ジョブの削除だけでも効果は大きい。

テーブル最適化で容量を解放

大量のレコードを削除した後は、データベースが断片化し、実際の容量が解放されないことがある。phpMyAdminなどから該当テーブルに対して「最適化(OPTIMIZE TABLE)」を実行するか、以下のSQLを流す。

OPTIMIZE TABLE wp_actionscheduler_actions;
OPTIMIZE TABLE wp_actionscheduler_logs;

これにより、削除した領域がOSに返却され、データベース全体のサイズが縮小する。

再発防止とHPOS設定の見直し

ループが再発しないように、WooCommerceのHPOS設定を確認する。管理画面の WooCommerce → 設定 → 詳細設定 → 機能 から「High-performance order storage(高性能注文ストレージ)」が有効になっているか、そして「互換モードを有効にする」や「データ同期を有効にする」オプションがどのようになっているかをチェックする。

既に全注文がHPOSテーブルに完全移行済みで、互換モードが不要なら、これらの同期オプションを無効化することで、バックグラウンドのバッチ処理そのものを止められる。ただし、テーマやプラグインが古い注文データ参照方法を使っている場合は注意が必要だ。

また、WP-CLIのcronを定期的に監視し、Action Schedulerのジョブ数が異常増加していないかをチェックする仕組みをサーバー監視に組み込むと早期発見につながる。

よくある質問

HPOSが有効かどうかはどこで確認できるか

管理画面の「WooCommerce → 設定 → 詳細設定 → 機能」に移動し、「注文データストレージ」の項目で「High-performance order storage」が選択されていれば有効だ。WP-CLIでは wp wc hpos status で確認できる。

完了ジョブを削除してもサイト動作に影響はないか

Action Schedulerの完了ジョブは過去の処理履歴であり、削除しても現在予約されているジョブや進行中の処理には影響しない。ただし、監査やデバッグ目的で残したい場合は、削除前にバックアップを取ることを強く推奨する。

WP-CLIが使えないレンタルサーバーではどうすればよいか

phpMyAdminなどのデータベース管理ツールから直接SQLで削除できる。プラグイン「WP Crontrol」などを利用すれば、Action Schedulerの一覧を管理画面で確認し、フックごとに手動で削除することも可能だが、件数が多い場合はSQLのほうが現実的だ。

同期をリセットしてもループが再発するのはなぜか

根本原因が解消されていないと再発する。たとえば、同期オプションが有効なまま残っていたり、カスタムコードがバッチをトリガーし続けているケースがある。同期の完全停止を試み、プラグインの干渉も疑いながら一つずつ切り分ける必要がある。

この記事のポイント

  • データベースの急激な肥大化とAction Schedulerの完了ジョブ数に注目する
  • フック名「wc_run_batch_process」と引数からHPOSの同期バッチループを特定する
  • WP-CLIで同期状態をリセットし、完了ジョブを一括削除してテーブルを最適化する
  • HPOSの同期設定を見直し、不要なバッチ処理を完全に止めて再発を防ぐ
ExtendifyとElementorが競合して編集ボタンが消えた時の直し方

ExtendifyとElementorが競合して編集ボタンが消えた時の直し方

Extendify Onboarding and AI Assistant が有効な環境で「Edit with Elementor」ボタンが消えた場合、原因は Extendify のオンボーディング用 JavaScript が Elementor の管理画面 UI を上書きしていることにある。プラグインを無効化して削除すれば即座に復旧するが、競合を回避したい場合は Extendify の Script 読み込み制御か Elementor の連携設定を調整する必要がある。

なぜ Extendify を有効にしていると「Edit with Elementor」が消えるのか

なぜ Extendify を有効にしていると「Edit with Elementor」が消えるのか

この問題は、レンタルサーバー側が WordPress の初期セットアップ時に Extendify をプリインストールしているケースで頻発する。Extendify は Gutenberg エディタの拡張として動作し、管理画面の JavaScript 処理全体に影響を与える設計だ。Elementor のエディタ起動ボタンは、ブラウザ上で動的に生成される管理画面 UI の一部で、Gutenberg のスクリプトがロードされた後に挿入される。Extendify のスクリプトがこのタイミングを阻害すると、ボタン生成処理が飛ばされてしまう。

特に「オンボーディングガイド」という機能が原因になる。これは管理画面に重ねて表示されるチュートリアル用のオーバーレイで、初回インストール後に自動で立ち上がる。このオーバーレイがアクティブな間、特定の DOM 要素の描画がブロックされる仕様であり、その対象に Elementor の「Edit with Elementor」ボタンが含まれている。

Elementor 側の設定を正しく行い、投稿タイプで「ページ」にチェックを入れ、「Elementor Full Width」テンプレートを適用していても、管理画面の表示ロジックそのものが Extendify に遮断されるため、ユーザー側の設定では回避できない。

▼ Extendify 有効時 ページ一覧で各行に「Edit with Elementor」が表示されない。ブロックエディタ上部の Elementor 起動ボタンも非表示。Gutenberg の編集画面には Extendify のオンボーディング UI が重なっている。
▼ Extendify 無効化・削除後 ページ一覧に「Edit with Elementor」が即時表示され、ブロックエディタの上部ツールバーにも Elementor ボタンが復活する。
Extendify が競合している状態  無効化で復旧

Extendify が有効な状態で Elementor の編集ボタンが消える仕組みを画面で比較した。管理画面の見た目はまったく変わらないのに、特定の操作要素だけが欠落するため、原因の特定に時間がかかりやすい。

管理画面から消えた「Edit with Elementor」ボタンを復活させる手順

管理画面から消えた「Edit with Elementor」ボタンを復活させる手順

Extendify 単体が原因かどうかを確定させる

まずはプラグインの競合切り分けの基本に入る。管理画面の「プラグイン」→「インストール済みプラグイン」から Extendify を探し、一時的に「無効化」する。この時点でページ一覧やブロックエディタを再読み込みし、「Edit with Elementor」が表示されるか確認する。復活すれば Extendify が原因で確定する。

もし無効化だけではボタンが戻らない場合、管理画面キャッシュの影響を疑う。ブラウザのハードリロード(Ctrl + Shift + R / Cmd + Shift + R)を実行し、さらにサーバー側のキャッシュプラグインがあれば全キャッシュを削除する。それでも改善しなければ、他のプラグインも含めた段階的な無効化に進む。

STEP 1 管理画面「プラグイン」→「インストール済みプラグイン」を開く
STEP 2 Extendify の「無効化」をクリックし、画面を再読み込み
STEP 3 ページ一覧とブロックエディタを開いて「Edit with Elementor」の有無を確認
STEP 4 ボタンが復活すれば Extendify が原因と確定、不要なら削除する

この手順で Extendify が原因かどうかがはっきりする。多くの場合、STEP 2 の段階ですでにボタンが戻る。

Extendify を残したまま競合を回避する方法

Extendify の AI 機能やオンボーディング自体は活用したいという場合、完全に削除する前に設定で回避できるかを試す。Extendify の管理画面「Extendify」→「Settings」にアクセスし、オンボーディングのガイド表示をスキップするか、Gutenberg 以外の場所でのスクリプト読み込みを制限するオプションを探す。バージョン 3.1 では細かい制御が難しいため、実質的には functions.php にコードを追加して Elementor の管理画面だけで Extendify のスクリプトを停止させる手段が現実的だ。

// ページ編集画面でのみ Extendify のスクリプトを解除する例
add_action( 'admin_enqueue_scripts', function( $hook ) {
    if ( 'post.php' === $hook || 'post-new.php' === $hook ) {
        wp_dequeue_script( 'extendify-assist' );
        wp_dequeue_script( 'extendify-onboarding' );
    }
}, 100 );

上記のコードを有効化した子テーマの functions.php に追加すると、投稿編集画面での Extendify の干渉だけを選択的に遮断できる。完全な動作保証は環境次第だが、根本的な競合を残さずに両立させる現実解としては有効だ。

レンタルサーバーのプリインストールプラグインが原因の場合の注意点

レンタルサーバーのプリインストールプラグインが原因の場合の注意点

国内のレンタルサーバーでも、WordPress のクイックスタート機能に独自のオンボーディングプラグインやテーマがプリインストールされているケースがある。こうしたプラグインはサーバー会社のブランドでパッケージされており、名前だけでは機能がわからないことも多い。管理画面が日本語であっても、元のプラグイン名が残っている場合や、逆にまったく別の名前に変わっている場合があるため、プラグイン一覧でバージョンや作者を確認する癖をつけておく。

ホスティングプロバイダーがプリインストールするプラグインには、キャッシュや高速化、セキュリティスキャン、オンボーディングアシスタントといった管理画面全体に影響するものが多い。Elementor の編集ボタンに限らず、管理画面上の特定のボタンや項目が突然消えたら、まずはプリインストールプラグインの無効化を試みてほしい。

他のプラグインでも同様の現象は起きるのか

他のプラグインでも同様の現象は起きるのか

同じように管理画面の JavaScript 全体を上書きするタイプのプラグインであれば、まったく同じ現象が起きる。管理画面の UI をカスタマイズするプラグインや、Gutenberg のブロックを拡張する多機能プラグインが競合しやすい。特に、Elementor と Gutenberg の両方を同時に運用しているサイトでは、両者のスクリプトロード順序が原因で、どちらかの編集ボタンが一時的に消えるトラブルが報告されている。

問題の特定には、ブラウザのデベロッパーツールでコンソールの JavaScript エラーを確認するのが有効だ。Elementor のボタン生成に失敗している場合、”Uncaught TypeError” や “Cannot read properties of null” といったエラーが出ていることが多い。これに加えて、ネットワークタブで Elementor 関連の .js ファイルの読み込み状況を見れば、どのプラグインが原因か絞り込みやすくなる。

よくある質問

Extendify を無効化したら Elementor の編集ボタンは戻ったが、Extendify は削除してもよいか

削除して問題ない。Extendify は Gutenberg の拡張と AI によるコンテンツ生成を目的としたプラグインで、Elementor をメインのページビルダーとして使うなら必須ではない。むしろ残しておくと将来のバージョンアップで再び競合するリスクがあるため、不要と判断したら完全に削除するほうが管理上は安全だ。

「Edit with Elementor」は表示されているがクリックしても反応しない

このケースは Extendify 以外にキャッシュプラグインやセキュリティプラグインが原因であることが多い。ブラウザのコンソールで JavaScript エラーを確認し、403 や 404 のリソース読み込みエラーが出ていれば、プラグインの除外設定を見直す必要がある。

同じ現象が発生したが Extendify は入っておらず、別のプラグインが原因のようだ。どう切り分ければいいか

全プラグインを一括で無効化し、標準テーマ(Twenty Twenty-Five など)に切り替えた状態で Elementor のボタンが復活するかを確認する。復活したら、プラグインを 1 つずつ有効化して原因を絞り込む。この方法で、どのプラグインが管理画面の JavaScript 処理を妨害しているかを確実に特定できる。

子テーマの functions.php にコードを追加するのが不安だ

コードスニペット用のプラグインを使えば、functions.php を直接編集せずに管理画面からコードの追加と削除ができる。競合が起きてもすぐに無効化できるため、動作テストにはこちらのほうが安全だ。

この記事のポイント

  • Extendify が有効だと「Edit with Elementor」ボタンが管理画面から消えるのは、オンボーディングスクリプトが原因
  • 無効化・削除で即座に復旧する。まずはプラグイン一覧から無効化して確認
  • Extendify を残したい場合は、functions.php でスクリプトを選択的に停止するコードを使う
  • レンタルサーバーのプリインストールプラグインが同様の競合を起こすケースがあるため注意
  • 他のプラグイン切り分けは、全無効化→1 つずつ有効化の手順で行う
WordPressで重大なエラーが発生した時の原因と復旧手順

WordPressで重大なエラーが発生した時の原因と復旧手順

WordPressで「このサイトで重大なエラーが発生しました」と表示され管理画面にもログインできない場合、まず試すべきはサーバーのエラーログ確認と、FTPを使った原因プラグインの強制停止だ。管理用メールが届かなくても、手動の切り分け作業でサイトを復旧できる。

なぜ「このサイトで重大なエラーが発生しました」と表示されログイン不能になるのか

なぜ「このサイトで重大なエラーが発生しました」と表示されログイン不能になるのか

あのメッセージが表示されるとき、WordPress内部ではPHPの「致命的エラー(Fatal Error)」が起きている。プログラムの処理がそこで停止してしまい、画面表示が途中で終わる。テーマやプラグインの更新失敗、PHPバージョンの非互換、サーバーのメモリ上限超過、あるいはコアファイルの破損など原因は多岐にわたる。

WordPress 5.2以降、致命的エラーが起きると管理画面へのログインも止められる設計になった。これは「壊れかけのサイトを操作し続けて被害を拡大させない」ための安全措置だ。通常なら「サイトに技術的な問題が発生しました。復旧手順のリンクを管理者メールアドレスに送信しました」という案内とともに「回復モード」用のリンクがメールで届く仕組みになっている。

ただ、このメールが届かないケースは実際には非常に多い。メールサーバーの設定不備や、そもそも通知を受け取る管理者アドレスが存在しないサイトもある。つまり「メールが届かない=打つ手がない」わけではない。手動での復旧手順を覚えておけば、すぐに対処できる。

管理用メールが届かなくてもエラーの原因を特定する手順

管理用メールが届かなくてもエラーの原因を特定する手順

原因を特定できないまま闇雲に操作すると、状況をさらに悪化させかねない。まずは「一体どのファイルの何行目で止まっているのか」という技術情報を掴む必要がある。

サーバーのエラーログを最優先で確認する

「重大なエラー」の原因は、ほとんどの場合サーバー上の「エラーログ」に明瞭に記録されている。エックスサーバー、ConoHa WING、さくらのレンタルサーバなど国内の主要レンタルサーバーなら、コントロールパネル内の「エラーログ」や「アクセスログ」といったメニューから確認可能だ。cPanel系であれば「Errors」アイコンから辿れる。

  • ログには「PHP Fatal error」という文言と、問題が起きたファイルのパス(/home/…/plugins/xxxx/xxxx.php on line 123 など)が刻まれている
  • ここでプラグイン名が明記されていれば原因はほぼ特定できたも同然だ
  • もしログの見方が分からない場合は、「エラーログをダウンロードして全文をテキストエディタで開き、Fatal で検索する」とよい

wp-config.php で WP_DEBUG を有効にしてエラーを画面表示させる

エラーログがすぐに見つからない・もしくはより直感的に原因を掴みたい場合は、WordPressのデバッグモードを有効にする。FTPソフト(FileZillaなど)か、サーバーのファイルマネージャーで WordPress インストールディレクトリ直下の wp-config.php ファイルに以下の行を追加する。

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

この設定でエラー情報は /wp-content/debug.log に書き出される。ブラウザ上でサイトを再読込し、その後このログファイルを開けば、先ほどと同じように原因ファイルを特定できる。WP_DEBUG_DISPLAYtrue にすると画面に直接エラーが表示されるが、一般の訪問者にも見えてしまうので本番環境での使用は推奨しない。問題を解決したあとは false に戻すか、行ごと削除すること。

FTPやファイルマネージャーで原因のプラグインやテーマを強制停止する

FTPやファイルマネージャーで原因のプラグインやテーマを強制停止する

原因が特定のプラグインやテーマだと判明したら、管理画面に戻らなくても手動で無効化できる。管理画面を経由せず、ファイル名の変更で読み込ませないようにする手法だ。これでサイトの表示や管理画面へのアクセスが復活する。

STEP 1 サーバーのエラーログを確認する
STEP 2 wp-config.php に WP_DEBUG 設定を追記する
STEP 3 エラーメッセージから原因プラグインを特定する
STEP 4 該当プラグインをリネームして無効化する

原因プラグインのフォルダをリネームする

FTPソフトまたはレンタルサーバーのファイルマネージャーで、WordPress のインストール先に移動し、/wp-content/plugins/ ディレクトリを開く。エラーログに書かれていたプラグイン名と一致するフォルダを見つけて、名前を変更する。末尾に「_deactivated」や「_bk」などを付け足せばよい。

  • 変更前: problem-plugin
  • 変更後: problem-plugin_deactivated

WordPress はフォルダ名が一致しないプラグインを読み込まなくなる。結果、致命的エラーの原因が取り除かれ、サイトは無事に表示されるようになる。管理画面にも再びログイン可能になる。

すべてのプラグインを一括で疑う場合の方法

エラーログ上でプラグイン名が特定できないが、何らかのプラグインが原因であることは間違いない場合、/wp-content/plugins/ フォルダそのものをリネームしてしまう手もある。たとえば pluginsplugins_stop に変更すれば、すべてのプラグインが一括で無効化される。その状態で管理画面にログインできれば、原因はやはりプラグインなので、フォルダ名を元に戻し、管理画面から一つずつ有効化していく。テーマが原因と疑われる場合は、/wp-content/themes/ 以下の現在のテーマフォルダをリネームする。WordPress はテーマが存在しないとデフォルトテーマ(Twenty Twenty-Five など)に自動で切り替わる。

復旧後に必ずやっておくべき再発防止策

復旧後に必ずやっておくべき再発防止策

サイトが無事に表示され管理画面にも入れたら、そのまま運用を再開するのではなく、必ず以下の3つをチェックする。これで同じエラーが二度と起きにくくなる。

WordPress本体、テーマ、プラグインをすべて最新にする

致命的エラーは「古いソフトウェア」と「最新のPHPバージョン」の組み合わせで起きやすい。更新が止まっている長期放置プラグインが混ざっているなら、代替のメンテナンスされているプラグインへの移行を検討する。

PHPバージョンをサーバー管理画面で上げる

WordPress の推奨する PHP バージョンは常に上がっている。サーバーのコントロールパネルで PHP 8.1 以上に設定変更できるか確認する。変更後はサイト全体の動作確認を必ず行う。

WP_DEBUG の設定を本番環境で必ず解除する

wp-config.php にデバッグ設定を追加していた場合、必ず define( 'WP_DEBUG', false ); に戻すか、該当行を削除する。ログ出力を有効にしたまま運用すると、サーバーのディスク容量を圧迫し、別のトラブルを引き起こす。

よくある質問

管理画面の「回復モード」リンクがメールで届かない理由は

主な原因はサイトのメール送信機能そのものが正常に動いていないことだ。特に共用サーバーでは PHP の mail() 関数が制限されているか、WordPress の送信メールが迷惑メールフォルダに分類されている。SMTPプラグインなどで送信経路を信頼性の高いものに変えれば、次回以降の通知は確実に届くようになる。

WordPressログイン画面自体が表示されない場合の対処法は

管理画面へのアクセスすら致命的エラーで遮断されているという状態だ。まず前述の FTP を使ったプラグイン一括停止を試す。それでも改善しないなら、.htaccess ファイルの破損も疑って、ファイル名を .htaccess_bk に変更し、WordPress 管理画面の「設定」→「パーマリンク」で再生成させる。

FTPパスワードがわからないが復旧できるか

レンタルサーバーのコントロールパネルにログインできれば、多くの場合ブラウザ上で操作できる「ファイルマネージャー」が利用可能だ。FTPアカウントの情報が不明でも、ファイルマネージャーさえ使えれば全く同じ手順でプラグインフォルダのリネームができる。

すべてのプラグインを停止してもエラーが消えない

テーマが原因の可能性が高い。FTPで /wp-content/themes/ 以下の現在のテーマフォルダをリネームする。また、WordPress のコアファイルが破損していることもある。「ダッシュボード」→「更新」から WordPress の「再インストール」を実行すれば、コアファイルが上書き修復される。

WP_DEBUG を設定したが debug.log に何も記録されない

サーバー側で PHP エラーログの出力先が別に固定されているケースだ。その場合、レンタルサーバーのコントロールパネルに用意されている「エラーログ」機能に、より詳細な情報が出ている。そこを確認すれば解決の糸口がつかみやすい。また、wp-config.php の記述場所が /* That's all, stop editing! */ より上にあるかも確認する。

この記事のポイント

  • 「重大なエラー」はPHPの致命的エラーが原因で起こる
  • メールが届かなくてもサーバーのエラーログで原因を特定できる
  • FTPやファイルマネージャーでプラグインフォルダをリネームして停止する
  • 復旧後はPHPバージョンの確認とWP_DEBUGの解除が必須
Events Manager 7.3.7更新後に致命的エラーで画面が真っ白になった時の直し方

Events Manager 7.3.7更新後に致命的エラーで画面が真っ白になった時の直し方

Events Manager 7.3.7 へ更新した直後にサイトが真っ白になり、WP_HTML_Tag_Processor::apply_attributes_updates() の致命的エラーが発生する現象は、別のプラグインやテーマが開始した出力バッファリングとの競合が原因だ。復旧には、プラグインを 7.3.6 以前に差し戻す。根本解決には、競合相手を特定して対処する必要がある。

なぜ 7.3.7 で WP_HTML_Tag_Processor の致命的エラーが起きるのか

なぜ 7.3.7 で WP_HTML_Tag_Processor の致命的エラーが起きるのか

表示されるエラーメッセージは「PHP Fatal error: WP_HTML_Tag_Processor::apply_attributes_updates(): Cannot use output buffering in output buffering display handlers」だ。これは、すでに出力バッファリング(ob_start)が始まっているのに、さらに別の出力バッファリングを入れ子で開始しようとしたときに PHP が送出する。

Events Manager 7.3.7 では、HTML 出力の整形やサニタイズに WordPress の WP_HTML_Tag_Processor を利用している。このクラスは内部的に ob_start() を使うことがあり、タイミングによっては二重バッファリングの禁止に抵触する。単体では問題にならなくても、先に出力バッファリングを開始する別のプラグイン(キャッシュプラグインやページビルダー、一部の翻訳プラグインなど)やテーマが組み合わさると、この競合が表面化する。

Before(エラー状態)
プラグイン A が先に出力バッファリングを開始。その後 Events Manager 7.3.7 が WP_HTML_Tag_Processor 経由で 2 重目のバッファを開始しようとして 致命的エラー で停止、画面が真っ白になる。
After(競合解消後)
競合相手を無効化するか、Events Manager を 7.3.6 に戻すと出力バッファリングの入れ子が発生せず、サイトが正常に表示される
エラー発生時  復旧後

まずはサイトを復旧させる 以前のバージョンに戻す手順

まずはサイトを復旧させる 以前のバージョンに戻す手順

管理画面にアクセスできず真っ白な状態でも、FTP またはサーバーのファイルマネージャーでプラグインを差し戻せば、数分で復旧できる。データベース上のイベント情報や設定は保持される。

STEP 1 FTP でサーバーに接続し、/wp-content/plugins/events-manager/ フォルダを events-manager-old にリネームする
STEP 2 管理画面が表示されるようになったら、「プラグイン」→「インストール済みプラグイン」で自動的に無効化された Events Manager を完全に削除する(イベントデータはデータベースに残る)
STEP 3 公式リポジトリの「開発」タブやバージョン管理から 7.3.6 の ZIP を入手し、「プラグイン」→「新規追加」→「プラグインのアップロード」でインストールして有効化する

FTP が使えない場合の代替手段

レンタルサーバーの管理画面にファイルマネージャー機能があるなら、同じ操作ができる。phpMyAdmin から wp_options テーブルの active_plugins 行を直接編集してプラグインの無効化を試みる方法もあるが、操作ミスが起きやすいため、ファイルマネージャーでフォルダ名を変更するほうが安全だ。

競合するプラグインやテーマを特定する手順

競合するプラグインやテーマを特定する手順

7.3.7 へ戻したい場合や、今後のアップデートでも同様の競合を防ぎたい場合は、次の手順で原因の相手を突き止める。

Health Check & Troubleshooting プラグインを使う

「サイトヘルスチェック&トラブルシューティング」プラグインは、管理者だけが特定のプラグインやテーマを有効化した状態をテストできる公式推奨ツールだ。有効化して「トラブルシューティングモード」を開始すると、サイトの外観を変えずに、Events Manager 7.3.7 だけを有効化した状態でエラーの再現を確認したり、1 つずつ他のプラグインと組み合わせて競合を絞り込める。

手動でプラグインを 1 つずつ検証する

  • 管理画面の「プラグイン」→「インストール済みプラグイン」で、Events Manager 以外の全プラグインを無効化する
  • テーマを標準テーマ(Twenty Twenty-Five など)に切り替える
  • Events Manager 7.3.7 を有効化してエラーが出ないことを確認する
  • 1 つずつ他のプラグインを有効化し、エラーが再現した時点で競合相手を特定する
  • テーマも元に戻して再現するか確認する

エラーログの取得と開発者への報告

エラーログの取得と開発者への報告

競合相手が特定できたら、Events Manager の開発元に情報を提供することで修正が期待できる。wp-config.phpWP_DEBUGtrue にし、WP_DEBUG_LOGtrue に設定すると、/wp-content/debug.log にエラーの詳細が記録される。

7.3.7 を有効化し競合プラグインも有効化した状態でエラーを発生させ、そのログを添えて公式フォーラムやサポートに報告する。同時に、競合相手のプラグイン開発者にも情報を伝えると、双方の調整が進みやすくなる。

よくある質問

7.3.7 に更新しなければ、この問題は起こらないのか

その通りだ。Events Manager 7.3.6 では WP_HTML_Tag_Processor を利用していないため、出力バッファリングの競合は発生しない。セキュリティ上や機能上の理由でアップデートしたい場合は、競合相手を特定してから更新するか、修正版のリリースを待つことを推奨する。

プラグインを削除してもイベントのデータは消えないか

Events Manager の予約データやイベント情報、設定はデータベースに保存されている。管理画面からプラグインを削除しても、これらのデータは保持される。ただし、完全に削除した場合、プラグイン側のアンインストール処理で消える可能性もあるため、事前にバックアップを取っておくとより安全だ。

他のプラグインでも同じようなエラーは出る可能性があるのか

WP_HTML_Tag_Processor は WordPress 本体の機能であり、他のプラグインでも利用される可能性がある。出力バッファリングを多用するプラグイン(キャッシュ系、出力圧縮系、外部出力を加工する系)と組み合わさると、同種の致命的エラーが起こりうる。発生時は同様の切り分け手順で原因を突き止められる。

管理画面にすら入れない場合、他に試せることはあるか

FTP でプラグインフォルダをリネームするのが最も確実な復旧手段だ。サーバー管理パネルのファイルマネージャーでも同様に操作できる。どうしてもファイルに触れない場合は、サーバー会社のサポートに依頼してリネームや無効化を依頼する方法もある。WP-CLI が使える環境なら wp plugin deactivate events-manager --skip-plugins=events-manager で無効化できる。

この記事のポイント

  • Events Manager 7.3.7 の致命的エラーは、他のプラグインやテーマとの出力バッファリング競合で発生する
  • 復旧には FTP でプラグインフォルダをリネームし、7.3.6 以前のバージョンに差し替える
  • 競合相手は「サイトヘルスチェック&トラブルシューティング」プラグインで安全に特定できる
  • エラーログを添えて開発者に報告すれば、今後の修正を促せる
  • プラグイン削除ではイベントデータは原則消えず、データベースに残る
Astraのフッターで特定のウィジェットロゴだけ表示されない時の直し方

Astraのフッターで特定のウィジェットロゴだけ表示されない時の直し方

Astra のフッターウィジェットエリアで、まったく同じ手順で設定したはずのロゴ画像が、ある特定の位置だけ表示されない。この現象はウィジェット個別の「デザイン」設定にある可視性トグルがオフになっているのが原因だ。

なぜ特定のウィジェットだけ表示されないのか

なぜ特定のウィジェットだけ表示されないのか

Astra のウィジェットには、共通の外観設定とは別に、各ウィジェット単体で表示を制御する「可視性(Visibility)」というオプションが存在する。この設定は Astra の「デザイン」タブ内にあり、デスクトップ・タブレット・モバイルのデバイスごとにオンオフを切り替えられる。今回のように「画像ファイル自体は正常で、配置場所を入れ替えても問題のウィジェット枠だけが出ない」という症状は、この可視性トグルが何らかの操作ミスやインポート時のずれでオフになっている典型的なケースだ。

WordPress の標準ウィジェット画面と Astra の独自設定が組み合わさっているため、単にウィジェットの中身を見るだけでは原因に気づきにくい。問題のウィジェットを開き、外観の設定ではなく Astra が拡張した「デザイン」パネルの中まで確認する必要がある。

STEP 1 「外観」→「ウィジェット」から該当のフッターエリアを開く
STEP 2 表示されないウィジェットをクリックして展開する
STEP 3 「デザイン」タブを選択し「可視性」セクションを探す
STEP 4 デスクトップ・タブレット・モバイルのトグルをすべてオンにする

上の手順図は Astra のウィジェット設定から可視性を修正する流れを示している。管理画面左メニューの「外観」から「ウィジェット」画面へ進み、問題のフッターエリアにある該当ウィジェットを開いて Astra の「デザイン」タブ内を確認する。

表示されないウィジェットを特定し設定を修正する手順

表示されないウィジェットを特定し設定を修正する手順

可視性トグルの確認と修正

ウィジェット編集画面を開いたら、まず Astra が追加する「デザイン」タブをクリックする。ここには「可視性」という項目があり、「デスクトップで表示」「タブレットで表示」「モバイルで表示」の3つのスイッチが並んでいる。いずれかひとつでもオフになっていれば、対応するデバイスでそのウィジェットは非表示になる。すべてのデバイスでオフになっていると、当然どの端末からも見えなくなる。

このトグルは、ウィジェットを複製したりテーマの設定をインポートした際に、意図せずオフの状態で保存されることがある。特に3カラム構成で同じロゴ画像を並べている場合、1つだけ設定がずれていても他と同じに見えるため、中身を確認しただけで「設定は同じだ」と思い込んでしまう。必ずデザインタブの可視性まで目を通す必要がある。

修正後にキャッシュをクリアして確認する

可視性トグルをオンにしてウィジェットを保存したら、必ずサイトのキャッシュを削除してからフロントエンドを確認する。キャッシュ系プラグインを使っている場合はそのプラグインのキャッシュ削除機能を実行し、ブラウザのキャッシュも念のためクリアしておくと確実だ。修正が即時反映されないケースの多くはキャッシュが残っているだけなので、焦らずキャッシュクリアを行ってから再度表示をチェックする。

似た症状だが可視性設定以外が原因のケース

似た症状だが可視性設定以外が原因のケース

z-index が競合している

Astra のフッター内で特定の要素だけが見えない場合、z-index の重なり順が原因になっていることがある。特に上に重なる背景要素や疑似要素(::before / ::after)があると、実際には出力されているのに視覚的に隠れてしまう。ブラウザの検証ツールで該当エリアを右クリックして「検証」を開き、要素が DOM 上に存在するかどうかを最初に確認する。要素自体があるのに見えないなら CSS の z-index や opacity、visibility プロパティを疑う。

プラグインやキャッシュの影響

最適化プラグインが CSS や JavaScript を結合・圧縮する過程で、Astra の可視性制御に関わるスタイルが誤って上書きされることがある。また、CDN を経由している場合はエッジサーバーに古いキャッシュが残っている可能性も考慮する。まずは最適化プラグインを一時停止して表示が直るか切り分け、問題が再現しなければ圧縮除外リストに Astra 関連の CSS を追加するといった対応をとる。

子テーマやカスタムコードの干渉

子テーマの functions.php にウィジェットの表示条件を操作するフィルターフック(widget_display_callback など)が記述されていると、Astra の可視性設定と競合することがある。また、独自に追加した CSS で特定のウィジェット ID に対して display: none を指定してしまっていないかも確認する。こうした干渉は、標準テーマに一時的に切り替えることでは Astra 側の問題と区別できないため、子テーマのコードを直接精査する必要がある。

よくある質問

Astra の可視性設定は Elementor で作ったフッターにも影響するのか

Elementor でフッターを構築している場合、Astra のウィジェット可視性設定は直接影響しない。ただし、Elementor で作成したフッターと Astra の標準フッターが混在している環境では、Astra の設定が効くエリアと効かないエリアが発生する。テーマのフッター管理画面で、実際にどちらのフッターが表示される設定になっているかを先に確認する。

可視性トグルをオンにしたのにまだ表示されない

可視性設定以外に、ウィジェット自体の「コンテンツ」が空になっていないか確認する。画像ウィジェットの場合、画像URLが欠落していると何事もなかったかのように空のHTMLが出力される。また、フッターウィジェットエリア全体が Astra のカスタマイザーで非表示に設定されていないかも再確認する。カスタマイザーの「フッター」→「フッターウィジェット」セクションでエリア自体の表示設定を変更できるためだ。

特定のデバイスだけで消えるのは可視性設定だけが原因か

可視性設定以外にも、CSS のメディアクエリで特定の画面幅に display: none が指定されているケースがある。Astra の追加 CSS や子テーマに誤ったメディアクエリが残っていないか、ブラウザの検証ツールでデバイスモードを切り替えながら該当要素の CSS を確認する。可視性トグルがすべてオンでも、別の CSS で上書きされていると表示されない。

この記事のポイント

  • Astra の特定ウィジェットだけ非表示になる主因は「デザイン」タブの可視性トグル
  • 修正はウィジェット編集画面のデザインタブからすべてのデバイストグルをオンにするだけ
  • キャッシュクリア後にフロントエンドで反映を確認する
  • z-index やプラグイン競合でも似た症状が出るため、DOM 上の存在確認が切り分けの第一歩
WooCommerce PayPal決済が断続的に失敗する原因と直し方

WooCommerce PayPal決済が断続的に失敗する原因と直し方

WooCommerce PayPal Payments プラグインで決済が断続的に失敗し OrderProcessor.php のエラーが発生する場合、注文 ID のセッション保存が決済リダイレクトと競合しているか、PayPal ウェブフックの署名検証に失敗している可能性が高い。原因をログから特定し、設定と更新状況を見直せば、決済の取りこぼしを止められる。

なぜ PayPal 決済やカード決済が断続的に失敗するのか

なぜ PayPal 決済やカード決済が断続的に失敗するのか

断続的に発生する決済失敗は、一定の条件が重なった時だけ起こる「競合状態」が原因になっていることが多い。WooCommerce PayPal Payments 4.0.4 以前のバージョンでは、購入者が PayPal にリダイレクトされる直前に注文 ID をセッションへ保存する処理と、PayPal 側の承認完了後の戻り処理がうまく噛み合わず、注文 ID を見失うケースが報告されている。

また PayPal から届く CHECKOUT.ORDER.APPROVED ウェブフックの署名検証に失敗すると、ブラウザ経由の戻りが完了しなかった注文を復旧できず、売上が失われる。キャッシュや最適化を完全に停止しても再発するケースは、プラグイン内部のタイミング問題である可能性が極めて高い。

エラーログから失敗のパターンを特定する

エラーログから失敗のパターンを特定する

WooCommerce PayPal Payments の詳細ログを有効にする

管理画面の「WooCommerce」から「設定」へ進み「決済」タブを開く。PayPal の項目にある「接続を管理」画面の下部に「ログ」というチェックボックスがあるので、これを有効にして保存する。有効化後は決済のたびにログが蓄積され始めるので、エラーが出たタイミングを正確に追える。

ログに記録されるエラーメッセージを読み解く

失敗時のログには「Payment failed: There was an error processing your order. OrderProcessor.php:109」と出力される。ただしこのメッセージだけでは表面的な情報に過ぎない。同じ時刻付近に PayPal API への注文作成リクエストや capture 呼び出しが記録されているかを確認することが重要だ。

もしログに PayPal 側の注文作成すら残っていないなら、プラグインが PayPal へ処理を引き継ぐ前の段階でコケている。逆に注文作成は成功しているのに capture 呼び出しが見つからないなら、戻り処理かウェブフックの不具合を疑う。

STEP 1 WooCommerce 設定で PayPal の詳細ログを有効にする
STEP 2 失敗時刻の前後で PayPal API 呼び出しの有無を調べる
STEP 3 注文作成ログがない場合はセッションと注文 ID の欠落を疑う

上の手順で失敗パターンを大まかに分類できる。注文作成ログが欠けているパターンは後述の注文 ID 消失問題と合致する。

ウェブフック検証失敗の原因と直し方

ウェブフック検証失敗の原因と直し方

ウェブフックが届いているのに検証に失敗する仕組み

PayPal から WordPress サイトの REST エンドポイント(/wp-json/paypal/v1/incoming)に届いたウェブフックは、プラグインが PayPal の公開鍵を使って署名を検証する。この検証が通らないと、たとえ CHECKOUT.ORDER.APPROVED イベントを受け取っていても支払いを完了できず、注文は保留のままになる。

署名検証が失敗する典型的な原因

まず疑うのはサーバー時刻のずれだ。署名にはタイムスタンプが含まれており、サーバーの時刻が大きく狂っていると検証に失敗する。次に考えられるのがプラグイン内部で保持している PayPal 公開鍵のキャッシュ不整合だ。接続情報を更新した直後や、マルチサイト構成でドメインが一致していない場合にも起こりうる。

ウェブフック検証を復旧させる具体的な対処

最初に PayPal との接続を一度解除し、再度接続し直す。これで公開鍵のキャッシュが強制的に再取得される。それでも直らない場合は WooCommerce の「ステータス」画面から「ツール」タブを開き、「WooCommerce のトランジェントをクリア」と「期限切れのトランジェントをクリア」を順に実行する。最後に PayPal のデベロッパーダッシュボードでウェブフック URL が本番環境の正しいドメインを指しているか確認する。

Before(検証失敗時)
ウェブフック受信 → 署名照合エラー → 注文が未完了のまま放置
After(再接続後)
ウェブフック受信 → 署名照合成功 → 注文が正常に完了
検証失敗  再接続で復旧

上の流れで復旧しない場合はプラグインバージョン固有の不具合が根底にある可能性が高い。

注文 ID がセッションから消える問題に対処する

注文 ID がセッションから消える問題に対処する

リダイレクト前に注文 ID が保存されない既知の不具合

GitHub の issue #4458 でも報告されているが、WooCommerce PayPal Payments 4.0.4 以前のバージョンでは、購入者が PayPal へリダイレクトされる直前に注文 ID を正しくセッションへ格納できないケースがある。これが発生すると、PayPal 上で決済が承認されても、戻ってきた WooCommerce 側でどの注文に紐づければよいかわからず、OrderProcessor がエラーを起こす。

修正パッチやバージョンアップで解決できるか

バージョン 4.1.0 ではこのタイミング問題に対する修正が含まれていると開発者からアナウンスされている。まずはプラグインを 4.1.0 以降へ更新することが最も確実な対処となる。どうしても本番環境で即時の更新が難しい場合は、プラグインの公式サポートチャネルを通じて修正パッチの提供を依頼する手もある。

更新前に検証するべき設定

更新前に WooCommerce の「システムステータス」レポートを取得し、PHP のバージョンが 8.0 以上であること、WordPress 本体と WooCommerce が最新の安定版であることを確認する。多言語プラグイン(WPML 等)を併用している場合は、プラグイン同士の互換性もあわせてチェックしておく。

それでも直らない場合に踏むべき最終手順

それでも直らない場合に踏むべき最終手順

キャッシュとセキュリティ系プラグインの完全な切り離し

速度最適化プラグインやサーバー側の動的キャッシュはすでに無効化していても、WAF(ウェブアプリケーションファイアウォール)やセキュリティプラグインが PayPal からのコールバック通信をブロックしている場合がある。一時的にすべてのセキュリティ系プラグインを停止し、サーバーのアクセスログで /wp-json/paypal/v1/incoming への POST リクエストが 200 ステータスを返しているか確認する。

注文メタデータとセッションデータの直接確認

失敗した注文の詳細画面を開き、カスタムフィールドに _ppcp_paypal_order_id というメタキーが存在するか調べる。これが空になっている注文は、まさに注文 ID の引き継ぎに失敗した注文だ。WooCommerce が生成した注文番号は存在するのに PayPal 側の注文 ID だけ欠落している場合は、前述の競合が再現したと断定してよい。

確認項目
注文メタデータ _ppcp_paypal_order_id の有無を確認
アクセスログ /wp-json/paypal/v1/incoming への POST が 200 を返しているか
プラグインバージョン 4.1.0 以上へ更新済みか
データ・技術系の確認ポイント

この三点を確認すれば、問題がインフラ寄りなのかアプリケーション寄りなのか切り分けられる。

よくある質問

PayPal のウェブフック検証失敗は何が原因か

サーバー時刻のずれや PayPal 公開鍵のキャッシュ不整合が最も多い原因だ。接続を一度解除して再接続し、WooCommerce のトランジェントをクリアすることで解決することが多い。まれにホスティング環境のファイアウォールが PayPal の検証用リクエストを遮断しているケースもある。

決済が断続的に失敗する場合、キャッシュが原因か

キャッシュが直接の原因でないケースも多い。キャッシュを完全に停止し、カートやチェックアウトの除外設定を施しても再発するなら、プラグイン内部の競合状態や注文 ID の引き継ぎ不良を疑うべきだ。

WooCommerce PayPal Payments の最新バージョンで問題は修正されたか

バージョン 4.1.0 では、注文 ID のセッション保存タイミングに関する修正が含まれている。4.0.4 以前で OrderProcessor エラーが断続的に出ている場合は、まず 4.1.0 以降へ更新することが推奨される。

注文 ID が保存されない問題はどうやって確認するか

失敗した WooCommerce 注文のカスタムフィールドを確認し、_ppcp_paypal_order_id というメタキーが空かどうかを調べる。空であれば注文 ID の引き継ぎに失敗している。プラグインの詳細ログにも PayPal 側の注文作成リクエストが記録されない。

ウェブフックのエンドポイントにアクセスできるか確認する方法は

サイトのアクセスログで /wp-json/paypal/v1/incoming への POST リクエストを探し、HTTP ステータスが 200 であることを確かめる。PayPal のデベロッパーダッシュボード上でウェブフック URL が本番ドメインを指しているかも同時に検証する。

この記事のポイント

  • ログを有効にして OrderProcessor エラーの前後に PayPal API 呼び出しが存在するか確認する
  • ウェブフック検証失敗は接続の再設定とトランジェントクリアで復旧する可能性が高い
  • 注文 ID のセッション消失は 4.1.0 以上のプラグイン更新で根本対処できる
  • キャッシュ停止だけでは直らない競合はプラグイン内部のタイミング問題を疑う
  • 注文メタデータとアクセスログの二面から原因の切り分けを進める