2026年5月20日
2026年5月20日
WordPressプラグインが競合する場合の特定・解決方法
はじめに
複数のプラグインを有効化していると、JavaScript エラー、レイアウト崩れ、機能不具合などが発生することがあります。「どのプラグインが原因か」を素早く特定する二分法と、競合を解決する手順を解説します。
症状・原因
プラグイン競合の典型的な症状:
- 特定ページでJavaScriptエラーが発生する
- 管理画面の一部が機能しない
- フロントエンドのレイアウトが崩れる
- 504/500エラーがプラグイン有効化後に発生する
原因の多くは、同じJavaScriptライブラリの重複読み込み、同じWordPressフックへの干渉、または名前空間の衝突です。
解決手順
ステップ1:全プラグインを無効化して問題が消えるか確認する
# WP-CLIで全プラグインを一括無効化
wp plugin deactivate --all
# 問題が解消した場合、プラグイン競合が原因と確定
# 問題が続く場合、テーマやWordPressコア自体が原因の可能性
wp theme activate twentytwentyfour # デフォルトテーマに切り替えて確認
ステップ2:二分法で原因プラグインを特定する
# 有効化されているプラグイン一覧を確認
wp plugin list --status=active --fields=name,title
# 半数ずつ有効化して問題を再現するグループを特定(二分法)
# 例:10個のプラグインがある場合
wp plugin activate plugin-a plugin-b plugin-c plugin-d plugin-e
# → 問題が再現したら、この5個の中に原因がある
wp plugin activate plugin-a plugin-b
# → 問題が再現したら、a か b が原因
wp plugin activate plugin-a
# → 問題が再現したら plugin-a が犯人と確定
ステップ3:競合の詳細をデバッグログで確認する
// wp-config.php — デバッグモードを有効化
define('WP_DEBUG', true);
define('WP_DEBUG_LOG', true); // /wp-content/debug.log に書き込む
define('WP_DEBUG_DISPLAY', false); // 画面には表示しない
define('SCRIPT_DEBUG', true); // 圧縮されていないJSを使用
# デバッグログをリアルタイムで確認
wp eval "define('WP_DEBUG', true);" && tail -f wp-content/debug.log
# JavaScriptエラーはブラウザの開発者ツール(F12)のコンソールタブで確認
ステップ4:競合を解決する
// functions.php — 特定プラグインのスクリプト読み込みを無効化
add_action('wp_enqueue_scripts', function() {
// プラグインAが読み込む古いjQueryを無効化
wp_deregister_script('jquery');
wp_register_script('jquery', includes_url('/js/jquery/jquery.min.js'), [], '3.7.1', true);
}, 100);
// 特定ページでのみプラグインを無効化
add_filter('option_active_plugins', function($plugins) {
if (is_page('checkout')) {
// チェックアウトページではプラグインAを除外
$plugins = array_filter($plugins, fn($p) => !str_contains($p, 'plugin-a'));
}
return $plugins;
});
注意事項
- プラグインを無効化する前に必ずバックアップを取得してください
- 本番環境ではなくステージング環境でテストしてから変更を適用することを推奨します
WP_DEBUG_DISPLAYは本番環境では必ずfalseに設定してください
まとめ
プラグイン競合は「全プラグイン無効化→二分法で特定→デバッグログで詳細確認」の手順で解決できます。WP-CLIを使えば素早く複数のプラグインを切り替えられるため、特定作業が大幅に効率化します。