
WP Event Manager Calendarで致命的エラーが出た時の原因と直し方
WP Event Manager Calendarを有効化すると「Call to undefined function get_event_manager_template()」という致命的なエラーが表示される場合、本体プラグインであるWP Event ManagerとCalendarアドオンのバージョンに互換性の問題が生じている。両方のプラグインを最新版に揃え、それでも直らなければ子テーマのfunctions.phpで関数を一時的に手動定義することで回避できる。
なぜWP Event Manager Calendarでエラーが出るのか
このエラーの根本原因は、アドオンプラグインが呼び出すget_event_manager_template()という関数が、本体のWP Event Manager側で削除されたか、名称変更されていることにある。もともとこの関数は、イベントデータの表示やカレンダー画面の生成を担うテンプレートを読み込むための重要な役割を持っていた。
Calendarアドオンがバージョン3.2.2の時点では問題なく動作していたことから、3.2.2とそれ以降の本体プラグインとの間で、関数の定義に何らかの変更が加えられたと考えられる。ところがアドオン側がその変更に追随しておらず、最新の3.4.0でもエラーが解消されていない状態だ。
WordPressでは、依存関係にあるプラグイン同士のバージョン管理はプラグイン開発者に委ねられている。片方だけ更新したり、互換性の確認を怠ったりすると、今回のように未定義の関数呼び出しによる「Fatal error」が発生し、管理画面に「このサイトで重大なエラーが発生しました」と表示される。
エラーメッセージを正確に特定してデバッグモードを有効にする方法

エラーが発生するとWordPressは「このサイトで重大なエラーが発生しました」という画面を表示し、管理画面にもアクセスできなくなるケースが多い。まずはエラーの詳細を正確に把握するため、WP_DEBUGモードを有効にしよう。
FTPクライアントやサーバーのファイルマネージャーで、WordPressインストールディレクトリにあるwp-config.phpを開く。次の記述を探し、それぞれtrueに変更する。
define( 'WP_DEBUG', true );
define( 'WP_DEBUG_LOG', true );
define( 'WP_DEBUG_DISPLAY', false );WP_DEBUG_DISPLAYをfalseにすることで、エラーが画面に表示されるのを防ぎつつ、/wp-content/debug.logにログが出力される。このログファイルを確認すれば、先ほどのCall to undefined function get_event_manager_template()と、どのファイルの何行目でエラーが起きたかを正確に特定できる。
WP Event Manager本体とCalendarアドオンの互換性を確保する手順

ここでは、エラーを解消するための具体的な手順を4つのステップに分けて示す。まずは基本となるプラグインの全更新から始め、それでも解決しない場合の暫定対応までを押さえる。
STEP 1からSTEP 3で環境をクリーンな状態に戻す
まず管理画面の「プラグイン」から、WP Event Manager本体が最新であることを確認する。更新可能な場合は更新を実行する。次にCalendarアドオンも同様に最新に揃える。アドオンの更新が提供されていない場合は、一度無効化と再有効化を試すとキャッシュされた古い依存関係が解消されることがある。
両方のプラグインを最新にしたら、一度すべてのプラグインを無効化してから再度必要なものだけを有効化し、ブラウザのキャッシュやサーバー側のキャッシュ(W3 Total CacheやWP Super Cacheなどを使用中の場合)もクリアする。その上で再度カレンダー機能が正常に動くかをテストする。
STEP 4で不足している関数を手動定義する
すべての更新を終えてもエラーが続く場合、WP Event Manager本体が関数の実装を完全に削除してしまっている可能性が高い。この場合の暫定対応として、子テーマのfunctions.phpに、不足している関数を手動で定義する方法がある。
次のコードは、本体プラグインの過去の実装を参考に、get_event_manager_template()関数を再定義する例だ。子テーマのfunctions.phpの末尾に追加する。
if ( ! function_exists( 'get_event_manager_template' ) ) {
function get_event_manager_template( $template_name, $args = array(), $template_path = 'wp-event-manager', $default_path = '' ) {
if ( $args && is_array( $args ) ) {
extract( $args );
}
$located = locate_template( array( $template_path . '/' . $template_name ) );
if ( ! $located && file_exists( WP_PLUGIN_DIR . '/wp-event-manager/templates/' . $template_name ) ) {
$located = WP_PLUGIN_DIR . '/wp-event-manager/templates/' . $template_name;
}
if ( $located ) {
include( $located );
}
}
}このコードは、まず関数が存在しないかをfunction_exists()で確認し、存在しなければテンプレートファイルをlocate_template()で探して読み込むという最小限の実装だ。本来のWP Event Managerが提供していた機能のすべてを再現するものではないが、Calendarアドオンが最低限必要とする「テンプレート読み込み」の役割を補い、エラーの発生を抑える効果が期待できる。
ただし、これはあくまで緊急回避策だ。WP Event Managerの内部実装に依存しているため、将来のアップデートでさらに互換性の問題が生じる可能性もある。根本的にはプラグイン開発者による修正を待つか、別のイベント管理プラグインへの切り替えを検討する必要がある。
よくある質問
他のイベント管理プラグインに乗り換えたほうがよいのか
WP Event Managerのエコシステム内で完結したい事情がない限り、乗り換えは有効な選択肢だ。The Events CalendarやEvents Managerなどの代替プラグインは、本体とアドオンの互換性がより厳格に管理されている傾向がある。ただし乗り換えの際はイベントデータのエクスポートとインポートの手間が発生する。
無料版のWP Event Managerでもこのエラーは起こるのか
WP Event Managerには無料のコアプラグインと、有料のアドオンが存在する。Calendarアドオンが有料版でのみ提供されている場合、無料版の本体だけではエラーは発生しない。しかし無料アドオンと併用していて同じエラーが起きる場合は、やはり本体とアドオンのバージョン不一致が原因となる。
他のアドオンも同時に影響を受ける可能性はあるか
get_event_manager_template()はWP Event Managerの複数のアドオンから呼び出される共通関数だった可能性が高い。そのため、Calendar以外のアドオン(登録フォームや検索機能など)でも、同じ「Call to undefined function」エラーが発生するリスクがある。本体の更新後は、使用中のすべてのアドオンを一括で最新バージョンに揃えることが重要だ。
重要なサイトで突然このエラーが出た場合の応急措置は
まずFTPでwp-content/plugins/wp-event-manager-calendarフォルダを一時的にリネームしてCalendarアドオンを無効化し、サイトを正常表示に戻す。その間にデバッグログを確認して原因を特定し、STEP 1からSTEP 3の更新作業を進める。どうしても復旧が急がれる場合は、STEP 4の関数手動定義でエラーを抑え込む。
プラグインを最新にしても直らない場合の最終手段は
WP Event Managerのサポートフォーラムや公式ドキュメントで、同じエラーに関する最新の報告がないか確認する。開発チームが修正版をリリースするまでのつなぎとして、古い安定バージョン(今回のケースでは3.2.2)にロールバックする方法もある。WP Rollbackプラグインを使えば、管理画面から安全に旧バージョンへ戻せる。
この記事のポイント
- エラーはWP Event Manager本体とCalendarアドオンのバージョン不一致が主因
- 両方のプラグインを最新版に更新し、キャッシュをクリアして動作確認する
- WP_DEBUGモードでエラーの正確な発生箇所を特定する
- どうしても直らない場合は子テーマで関数を手動定義して暫定回避する
- 根本解決にはプラグイン開発者の修正か代替プラグインへの移行を検討する

・ Reddit、Stack Overflow、WordPress.org フォーラムを日々巡回し、現場の悩みを拾い上げて記事化
・ WordPress、WooCommerce、Next.js などモダンWeb制作領域のトラブルシューティングが専門
・ 「検索しても答えが見つからなかった」を一つでも減らすことが目標
・ エラーメッセージから根本原因にたどり着く粘り強い調査が得意
・ 初心者がつまずきやすい箇所を先回りで解決する記事作りを心がけている

Advanced Ads 2.0.23 アップデート後の致命的エラーの直し方
Advanced Ads 2.0.23 にアップデートした途端に「このサイトで重大なエラーが発生しました」と表示される問題は、Pro版のキャッシュバスティング機能が原因だ。管理画面にアクセスできなければ、FTP またはファイルマネージャーでプラグインを手動で一時無効化し、バージョンを 2.0.22 に戻せば即座に復旧する。
なぜ Advanced Ads 2.0.23 で致命的エラーが起こるのか

エラーの直接の原因は、Advanced Ads のコアプラグイン側にある abstract-group.php の 170 行目で、Pro版のキャッシュバスティングモジュールから渡された配列データの型を正しく取り扱えず、TypeError が発生している点だ。PHP 8.4 系の厳格な型チェックによって、以前のバージョンでは警告で済んでいた箇所が致命的エラーに変わった。
内部的には、get_ad_weights メソッドが想定するデータ構造と、キャッシュバスティングが上書きしたグループ情報との間で不整合が起きている。とくに広告グループの重み付け配列に対して isset や empty でアクセスしようとした際に、オフセットとして配列そのものを渡してしまう形になり、PHP が型エラーを投げている。
→ 「このサイトで重大なエラーが発生しました」
→ サイトが正常表示される
上記のデモは、キャッシュバスティング機能が有効な状態でのエラー発生と、プラグインのダウングレードによる復旧の流れを表している。
管理画面にアクセスできない場合の緊急復旧手順
致命的エラーによって WordPress 管理画面にもログインできない状態では、ブラウザ上の操作だけで問題を解消できない。FTP クライアントか、レンタルサーバーのファイルマネージャーを使ってサーバー上のファイルを直接操作する。
FTP またはファイルマネージャーでプラグインを一時無効化する
サーバーに接続したら、/wp-content/plugins/ ディレクトリへ移動する。ここで advanced-ads フォルダと advanced-ads-pro フォルダの名前を変更する。フォルダ名の末尾に -disabled を付与すれば、WordPress はそのプラグインを認識しなくなり、エラーが止まる。
フォルダ名の変更例は次のとおりだ。advanced-ads → advanced-ads-disabledadvanced-ads-pro → advanced-ads-pro-disabled
この状態でサイトのフロントエンドにアクセスすると、致命的エラーは出なくなる。ただし広告が一切表示されない点に注意する。次に管理画面へ入れるようになるので、続けてプラグインのバージョンロールバックを行う。
Advanced Ads をバージョン 2.0.22 に戻す
まず FTP でリネームした advanced-ads-disabled フォルダを元の advanced-ads に戻す。Pro版の advanced-ads-pro-disabled は、まだ無効化されたままにしておく。この操作で Advanced Ads の基本プラグインだけが有効化された状態になる。
管理画面にログインし、「Advanced Ads」→「ツール」→「バージョン管理」へ進む。ここでバージョン 2.0.22 を選択し、ロールバックを実行する。ロールバック完了後、Pro版のフォルダ名を元に戻して有効化すれば、2.0.22 の組み合わせで通常運用に復旧できる。
この一連の手順で、管理画面に入れない状態からでも確実にサイトを復旧できる。
キャッシュバスティングを無効化して一時しのぎする方法

管理画面にアクセスできる状態であれば、Pro版のキャッシュバスティング機能をオフにするだけで致命的エラーを回避できる。Advanced Ads Pro の設定画面を開き、「キャッシュバスティング」セクションのトグルを無効化する。これにより cache-busting.class.php の処理が走らなくなり、エラーの発生箇所が呼び出されない。
無効化後にサイトのフロントエンドを再読み込みして、エラーが消えたことを確認する。この方法はあくまで応急処置であり、根本的な修正が公式から提供されるまではキャッシュバスティング機能を使えない点に留意する。広告のインプレッション計測や表示の最適化に影響が出るため、修正版のリリースを待つか、前述のロールバックを適用するほうが望ましい。
PHP 8.4 環境で注意すべきエラーの傾向
PHP 8.4 では、配列オフセットに対する型の取り扱いがさらに厳格化された。今回のエラーも、Cannot access offset of type array in isset or empty というメッセージにあるとおり、配列を別の配列のキーとして使おうとしたコードがエラーになっている。PHP 7.x 系では E_WARNING で済んでいたコードが、8.x 系では TypeError の致命的エラーに格上げされるケースが増えている。
TagDiv Newspaper のような複合的なテーマとビルダー系プラグインを併用している環境では、テーマが内部的にウィジェットブロックを動的サイドバーとしてレンダリングし、その中で Advanced Ads の広告配置が呼び出される。この呼び出し階層が深いほど、わずかな型の不整合がスタックトレース全体を巻き込む致命的エラーに発展しやすい。エラーログのスタックトレースを読むときは、一番上の発生行だけでなく、そのひとつ下の呼び出し元との関係に着目すると原因特定が早まる。
よくある質問
2.0.23 にアップデートしたあとサイト全体が真っ白になるのは同じ原因か
同じ可能性が高い。とくに Pro版のキャッシュバスティングを有効にしている場合、このエラーが発生する。画面が真っ白になるのは PHP の致命的エラーによって WordPress の表示処理が途中で停止しているためだ。サーバーのエラーログを確認すると、今回と同じ TypeError が記録されているはずだ。
ロールバック機能が管理画面から使えないときはどうすればよいか
FTP でプラグインフォルダをリネームして一時無効化し、コアプラグインだけを有効にして管理画面にアクセスできる状態を作る。そのうえで「バージョン管理」からロールバックを実行する。どうしても管理画面に入れない場合は、WordPress 公式プラグインディレクトリから 2.0.22 の ZIP を手動でダウンロードし、FTP で上書きアップロードする方法でもダウングレードできる。
Pro版のキャッシュバスティングを無効にすると広告収益にどの程度影響があるか
キャッシュバスティングは広告の表示を毎回動的に変えることでキャッシュによる同一広告の連続表示を防ぐ仕組みだ。無効化すると、ページキャッシュが効いた状態では同じ広告が繰り返し表示される可能性が高まり、インプレッションの多様性が下がる。短期的な暫定対処としては許容できるが、修正版リリース後は必ず再有効化するほうがよい。
今回のエラーは Advanced Ads 無料版だけでも発生するのか
エラーの起点はコアプラグインの abstract-group.php だが、実際に問題を引き起こしているのは Pro版のキャッシュバスティングモジュールだ。無料版のみの利用では通常発生しない。ただし同じ PHP 8.4 環境で他のアドオンを使っている場合は、類似の型エラーに注意が必要だ。
この記事のポイント
- Advanced Ads 2.0.23 + Pro キャッシュバスティングの組み合わせで発生する
- 管理画面にアクセスできないときは FTP でプラグインフォルダをリネームして無効化する
- コアプラグインを 2.0.22 にロールバックすれば復旧できる
- キャッシュバスティングの無効化は暫定対処であり根本解決にはならない
- PHP 8.4 の厳格な型チェックがエラーの引き金になっている

・ Reddit、Stack Overflow、WordPress.org フォーラムを日々巡回し、現場の悩みを拾い上げて記事化
・ WordPress、WooCommerce、Next.js などモダンWeb制作領域のトラブルシューティングが専門
・ 「検索しても答えが見つからなかった」を一つでも減らすことが目標
・ エラーメッセージから根本原因にたどり着く粘り強い調査が得意
・ 初心者がつまずきやすい箇所を先回りで解決する記事作りを心がけている

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 の致命的エラーが起きるのか

表示されるエラーメッセージは「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() を使うことがあり、タイミングによっては二重バッファリングの禁止に抵触する。単体では問題にならなくても、先に出力バッファリングを開始する別のプラグイン(キャッシュプラグインやページビルダー、一部の翻訳プラグインなど)やテーマが組み合わさると、この競合が表面化する。
WP_HTML_Tag_Processor 経由で 2 重目のバッファを開始しようとして 致命的エラー で停止、画面が真っ白になる。まずはサイトを復旧させる 以前のバージョンに戻す手順

管理画面にアクセスできず真っ白な状態でも、FTP またはサーバーのファイルマネージャーでプラグインを差し戻せば、数分で復旧できる。データベース上のイベント情報や設定は保持される。
/wp-content/plugins/events-manager/ フォルダを events-manager-old にリネームする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.php で WP_DEBUG を true にし、WP_DEBUG_LOG も true に設定すると、/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 以前のバージョンに差し替える
- 競合相手は「サイトヘルスチェック&トラブルシューティング」プラグインで安全に特定できる
- エラーログを添えて開発者に報告すれば、今後の修正を促せる
- プラグイン削除ではイベントデータは原則消えず、データベースに残る

・ Reddit、Stack Overflow、WordPress.org フォーラムを日々巡回し、現場の悩みを拾い上げて記事化
・ WordPress、WooCommerce、Next.js などモダンWeb制作領域のトラブルシューティングが専門
・ 「検索しても答えが見つからなかった」を一つでも減らすことが目標
・ エラーメッセージから根本原因にたどり着く粘り強い調査が得意
・ 初心者がつまずきやすい箇所を先回りで解決する記事作りを心がけている

WooCommerce納品書印刷で致命的エラーが出た時の直し方
WooCommerce の「Print Invoice & Delivery Notes for WooCommerce」プラグインで納品書や請求書を印刷しようとしたとき、管理画面に「このサイトで重大なエラーが発生しました」と表示され、PDF が生成されない問題は、PDF 生成に使う Dompdf ライブラリのクラスが見つからないことが原因だ。プラグインを再インストールし、サーバーのキャッシュをクリアすればほぼ解決する。
なぜ納品書印刷で致命的エラーが発生するのか

エラーログを確認すると「PHP Fatal error: Uncaught Error: Class “Dompdf\Options” not found」というメッセージが記録されている。これはプラグインが PDF を生成するために依存している Dompdf ライブラリを読み込めず、クラスが存在しない状態で呼び出されたことを意味する。原因は主にふたつに集約される。
ひとつはプラグインのインストールやアップデート時に、Dompdf のファイルを含む vendor ディレクトリが正しく配置されなかったケース。FTP アップロードの中断やパーミッションの問題でライブラリが欠落すると、このエラーが起きる。もうひとつは OPcache やプラグインのクラス自動読み込み(オートローダー)の不具合だ。管理画面の Ajax 経由で印刷を実行する際、特定の条件下でオートローダーが動かず、クラスが見つからないと判断される。一括印刷(Bulk Actions)が正常に動作するのも、別のコード経路でライブラリが読まれるためで、単票の印刷だけが失敗する典型的なパターンになっている。
エラーの切り分けと再インストール手順

エラーを解消するには、まずプラグインのファイルが完全に揃っている状態に戻し、キャッシュの影響を断ち切るのが確実だ。以下のステップで順に進めると、根本原因を速やかに取り除ける。
STEP 1 エラーログを確認して確実に特定する
WordPress の wp-config.php に define('WP_DEBUG', true); define('WP_DEBUG_LOG', true); が記述されていれば、/wp-content/debug.log に今回のような致命的エラーが記録される。ログを開き「Dompdf\Options not found」という行が含まれていることを確かめる。もしログが取れていなければ、上記の定数を一時的に有効にしてから問題の印刷操作をもう一度試す。この情報があると、単なる画面の白化や汎用エラーと区別でき、対応を誤らない。
STEP 2 プラグインを完全に再インストールする
管理画面の「プラグイン」→「インストール済みプラグイン」から「Print Invoice & Delivery Notes for WooCommerce」を探し、一度「無効化」をクリックしてから「削除」を実行する。その後、改めて「プラグイン」→「新規追加」で同じプラグインを検索し、最新バージョンをインストールして有効化する。これで vendor ディレクトリ以下の Dompdf ライブラリが確実に揃う。
もしなんらかの事情で管理画面から削除できない場合は、FTP またはサーバーのファイルマネージャーを使って /wp-content/plugins/woocommerce-delivery-notes/ ディレクトリを丸ごと削除し、再度アップロードする。その際、ディレクトリ名やパーミッションが正しいことを確認しておく。
STEP 3 サーバー側のキャッシュをリセットする
PHP 8.2 環境では OPcache が有効になっており、古いクラスパスの情報がキャッシュに残っていると再インストール後もエラーが続く場合がある。レンタルサーバーの管理画面から PHP の OPcache をクリアするか、php.ini などで opcache_reset(); を一時的に実行する。また、nginx の fastcgi キャッシュを使っている場合はそちらも削除しておく。WordPress 側で WP Rocket や W3 Total Cache などのキャッシュプラグインを利用していれば、すべてのキャッシュを完全にクリアする。
管理画面で「印刷」を押すと「このサイトで重大なエラーが発生しました」と表示され PDF が生成されない
納品書や請求書の PDF が問題なく生成され、印刷も正常に動作する
STEP 4 納品書印刷を再度実行して検証する
WooCommerce の注文一覧から該当の注文を選び、「印刷」ボタンをクリックして PDF が開くことを確認する。もしこれでも同じエラーが出る場合は、別の PDF 出力系プラグイン(例 「PDF Invoices & Packing Slips for WooCommerce」など)との競合も疑い、それらを一時的に無効化して原因を絞り込む。Dompdf クラスを上書きするようなカスタマイズや、異なるドキュメント生成ライブラリが同じ名前空間を使っているケースでは、片方のプラグインを停止する必要がある。
キャッシュや競合プラグインの対処をもう少し深掘りする

OPcache の影響は想像以上に大きい。特に PHP のバージョンを上げたり、プラグインを一括更新したあとは、古いオートロードマップが残ってしまい、クラス不存在のエラーが続くことがある。サーバーが共用の場合でも、管理パネルに「PHP 設定」「PHP 再起動」などの項目があればそこから OPcache をクリアするか、何もなければレンタルサーバー会社のサポートに依頼する。
また、Kinsta や WP Engine のようなマネージドホスティングでは独自のキャッシュレイヤーを持っているため、管理画面のキャッシュクリア機能を使ってオブジェクトキャッシュやページキャッシュを完全に削除する必要がある。自前で nginx の fastcgi_cache を組んでいる場合は、fastcgi_cache_path のディレクトリを空にするか、キャッシュ無効化のパラメータを追加してから再度有効化する。
複数の PDF プラグインが有効になっていると、同じ Dompdf ライブラリを異なるバージョンで読み込もうとしてクラス衝突が起きることもある。このプラグインのバージョン 7.2.0 が特に最新の Dompdf に追従していない場合、他のプラグインが読み込んだ後に自前のオートローダーが正しいパスを指せず、今回のエラーになる。こうしたケースでは、問題のプラグイン以外の PDF 関連プラグインをすべて無効化し、一つずつ原因を特定していく。最悪の場合は代替プラグインへの乗り換えも選択肢になる。
よくある質問
プラグインを再インストールしても直らない場合は?
管理画面の「ツール」→「サイトヘルス」でループバックリクエストのエラーや REST API の異常がないかを確認する。Ajax 通信自体がブロックされていると Dompdf の読み込み以前に失敗する。また、サーバーのエラーログで open_basedir 制限や disable_functions の影響が出ていないかもチェックする。
一括印刷は動くのに単票だけ失敗する理由は?
一括印刷は admin-post.php 経由か、直接テンプレートを呼び出す仕組みで動いており、admin-ajax.php を使う単票印刷とは異なるコードパスになる。結果としてオートローダーの読み込みタイミングが変わり、エラーが出たり出なかったりする。根本的には再インストールで解消するが、どうしても直らなければプラグインの設計上の不具合の可能性もある。
エラーログに Dompdf のクラスがないと出るが、ファイルはサーバーに存在している
FTP などで /wp-content/plugins/woocommerce-delivery-notes/vendor/dompdf/dompdf/src/Options.php が実在するのにエラーが出る場合、PHP の OPcache か、nginx のファイルキャッシュが古い状態を返している可能性が高い。OPcache の再起動やサーバーキャッシュのクリアで直ることがほとんどだ。それでも変わらないときは、ファイルのパーミッションが読み取り不可になっていないかも確認する。
ほかの PDF プラグインと同時に使えるか?
同じ Dompdf を内部で使うプラグイン同士は、名前空間の解決順序によってクラスが見つからなくなるリスクがある。実際に複数の PDF 出力系プラグインを有効にしている場合は、トラブルシューティングのために一度すべて無効化し、必要なものだけを再び有効化することを推奨する。
PHP のバージョンを上げた後に起きたが関係あるか?
PHP 8.2 以上ではクラス自動読み込みの挙動が厳格になり、以前は暗黙的に読めていたファイルが読めなくなることがある。プラグインが最新バージョンで PHP 8.2 に対応しているかどうかを開発元の Tyche Softwares のドキュメントで確認し、対応済みであれば再インストールで問題は解消する。
この記事のポイント
- 致命的エラーは Dompdf ライブラリのクラスが読み込めないことが原因
- プラグインをいったん完全に削除し、最新版を再インストールするのが最も確実
- サーバーの OPcache や各種キャッシュを必ずリセットする
- 複数の PDF プラグインの同時利用が競合を引き起こしている可能性も疑う
- 一括印刷が動作していても単票でのエラーは起こり得る

・ Reddit、Stack Overflow、WordPress.org フォーラムを日々巡回し、現場の悩みを拾い上げて記事化
・ WordPress、WooCommerce、Next.js などモダンWeb制作領域のトラブルシューティングが専門
・ 「検索しても答えが見つからなかった」を一つでも減らすことが目標
・ エラーメッセージから根本原因にたどり着く粘り強い調査が得意
・ 初心者がつまずきやすい箇所を先回りで解決する記事作りを心がけている
