2026年5月20日
2026年5月20日
PHPのFatal errorを解決する方法【WordPress白い画面の原因】
はじめに
「Fatal error」はPHPの致命的エラーで、処理が完全に停止してページが真っ白になったり、エラーメッセージが表示されたりします。WordPressで最もよく起きるPHPエラーの一つです。エラーメッセージを読み解いて、適切な対処をすることが重要です。
主なFatal errorの種類と原因
// よく見るFatal error
Fatal error: Call to undefined function xxx()
→ 存在しない関数を呼び出している
Fatal error: Class 'SomeClass' not found
→ 必要なクラスが読み込まれていない
Fatal error: Allowed memory size of xxx bytes exhausted
→ PHPのメモリ上限を超えた
Fatal error: Maximum execution time of 30 seconds exceeded
→ 処理時間の上限を超えた
Fatal error: Cannot redeclare xxx()
→ 同じ名前の関数が複数回定義されている
解決手順
ステップ1:デバッグモードでエラー詳細を確認
// wp-config.phpに追加
define('WP_DEBUG', true);
define('WP_DEBUG_LOG', true);
define('WP_DEBUG_DISPLAY', false);
エラー内容を/wp-content/debug.logで確認します。
ステップ2:Call to undefined function
最多パターン。存在しない関数を呼んでいる:
// 原因1:プラグイン/テーマの関数を読み込む前に呼び出している
add_action('init', function() {
my_plugin_function(); // プラグインがまだ読み込まれていない場合
});
// 対処:hookのタイミングを遅らせる
add_action('plugins_loaded', function() {
my_plugin_function(); // 全プラグイン読み込み後に実行
});
プラグインが原因の場合: FTPでプラグインフォルダを_offにリネームして無効化
ステップ3:Allowed memory size exhausted
// wp-config.phpでメモリ制限を増やす
define('WP_MEMORY_LIMIT', '256M');
define('WP_MAX_MEMORY_LIMIT', '512M'); // 管理画面用
# php.iniに追加(VPSなど)
memory_limit = 256M
# .htaccessに追加(Apache)
php_value memory_limit 256M
ステップ4:Cannot redeclare
同じ名前の関数が2回定義されている:
// ❌ 問題:同じ名前の関数が2つある
function my_helper() { /* A */ }
function my_helper() { /* B */ } // Fatal error!
// ✅ 解決:function_exists()で存在確認してから定義
if (!function_exists('my_helper')) {
function my_helper() { /* ... */ }
}
プラグインのアップデートやコピーで同じ関数が重複することがあります。
ステップ5:Class not found
// オートローダーが正しく設定されているか確認
// プラグイン内の場合はcomposer.jsonのautoload設定を確認
require_once 'vendor/autoload.php'; // Composerを使う場合
// 手動でinclude
require_once plugin_dir_path(__FILE__) . 'includes/class-my-plugin.php';
ステップ6:プラグイン・テーマのアップデートで発生した場合
最近のアップデート直後に発生した場合:
1. FTPでそのプラグイン/テーマを古いバージョンに戻す
2. または:FTPでそのプラグインを無効化してから管理画面で再有効化
3. プラグインの開発者にバグ報告する
まとめ
Fatal errorはエラーメッセージのファイル名・行番号を確認して対処します。「Call to undefined function」はプラグイン無効化で確認、「Allowed memory size exhausted」はメモリ制限の増加、「Cannot redeclare」はfunction_exists()でのガードで解決します。
関連記事: