背景「Cannot redeclare」エラーが表示される場合、通常、サイトが「死の真っ白な画面(WSOD)」でクラッシュしたことを意味します。これはPHPが限界に達したために発生します。システムメモリ内に既に存在するクラスや関数を再度ロードしようとした際、PHPは重複を許可しないためです。
正確なエラーメッセージは通常以下のようになります:
Fatal error: Cannot redeclare class WC_Cart (previously declared in /wp-content/plugins/woocommerce/includes/class-wc-cart.php) in /wp-content/plugins/woocommerce/includes/class-wc-cart.php on line 1
上記の WC_Cart の例のように、エラーが同じファイルを2回指している場合は少し厄介です。通常、これはシンボリックリンクなどが原因で、ファイルが2つの異なるパスからロードされたことを意味します。また、プラグインがWooCommerceのコアクラスを不適切に「モック」したり上書きしようとしている可能性もあります。
デバッグプロセスおそらくWordPressのダッシュボードにアクセスできない状態ですので、FTPの認証情報を用意するか、ホスティングのファイルマネージャーを開いてください。何が起きているかを確認するために、ファイルを直接調査する必要があります。
1. WordPressのデバッグを有効にするルートディレクトリにある wp-config.php ファイルを開きます。define( 'WP_DEBUG', false ); という行を探し、以下の3行に置き換えます:
define( 'WP_DEBUG', true );
define( 'WP_DEBUG_LOG', true );
define( 'WP_DEBUG_DISPLAY', true );
これにより、衝突の原因となっている完全なファイルパスが表示されます。多くの場合、2つの異なるプラグインが同じ共通ライブラリ(例えば、古いバージョンの class-tgm-plugin-activation.php など)を使用しようとしていることがわかります。
2. 原因を特定するエラーメッセージのパスを確認してください。パスが異なる場合、2番目に記載されているパスが、直前にインストールまたは更新したプラグインであるのが一般的です。それが「原因」です。パスが同一の場合、コード内で require_once ではなく require が使用されている可能性があります。
ステップバイステップの解決策### 方法1:「名前変更」によるショートカットプラグインの更新直後にクラッシュが発生した場合は、FTPを使用して /wp-content/plugins/ に移動します。疑わしいプラグインのフォルダ名を変更します(例:jetpack を jetpack-off に変更)。これにより、プラグインが即座に無効化されます。サイトが正常に表示されるようになれば、原因が特定されたことになります。
方法2:require_once への切り替えカスタムコードで同じファイルを複数回ロードすると、このエラーが発生することがよくあります。ループ内や複雑なテーマで require や include を使用するのは危険です。既にロードされている場合はファイルをスキップするようPHPに指示する「once」バリアントを使用するのが最善です。
非推奨:
require( plugin_dir_path( __FILE__ ) . 'includes/helpers.php' );
推奨:
require_once( plugin_dir_path( __FILE__ ) . 'includes/helpers.php' );
方法3:防御的なラッパーチェックを使用するプロの開発者は、名前を使用する前に必ずその名前が既に使用されていないかを確認します。このシンプルな「if」文により、WordPressエコシステムにおける再定義エラーの99%を防ぐことができます。
関数の場合:
if ( ! function_exists( 'my_unique_prefix_utility' ) ) {
function my_unique_prefix_utility() {
// ここにコードを記述
}
}
クラスの場合:
if ( ! class_exists( 'My_Plugin_Handler' ) ) {
class My_Plugin_Handler {
// ここにコードを記述
}
}

