🚨 よくあるエラーと解決法

白い画面(White Screen of Death)

原因:PHPの致命的エラー(構文エラー・クラス未定義・メモリ不足など)

解決手順:

  1. wp-config.phpに define('WP_DEBUG', true); define('WP_DEBUG_LOG', true); を追加
  2. wp-content/debug.log の最後のエラーを確認
  3. FTPで wp-content/plugins/ 内の問題プラグインフォルダを renamed_xxx に変更して無効化
  4. php.ini の memory_limit を 256M に増やす

「プラグインが見つかりません」/ 管理画面に表示されない

原因:ファイル構造・ファイル名・ヘッダーコメントが不正

確認事項:

  • ファイルが wp-content/plugins/my-plugin/my-plugin.php にあるか確認
  • プラグインのメインファイルに Plugin Name: XXX ヘッダーがあるか確認
  • ファイルの文字コードがBOM付きUTF-8になっていないか確認(BOMなしUTF-8にする)

別のプラグイン・テーマと競合する

原因:関数名・クラス名・グローバル変数の重複

解決策:

  • すべての関数名・クラス名にプラグイン固有の接頭辞を付ける(例: mfp_
  • 関数定義前に function_exists() でチェックする
  • PHPの名前空間(namespace)を使う(より確実)
// 接頭辞で競合を防ぐ function mfp_get_data() { /* ... */ } // または名前空間を使う namespace MyFirstPlugin; function get_data() { /* ... */ }

JavaScriptが動かない / jQueryエラー

原因:jQuery競合、読み込み順序、管理画面/フロントのフック違い

解決策:

  • wp_enqueue_script()の依存配列に 'jquery' を追加する
  • フロントエンドは wp_enqueue_scripts、管理画面は admin_enqueue_scripts フックを使う
  • ブラウザのコンソールでエラーメッセージを確認する
  • SCRIPT_DEBUG=true でminify前のファイルを使って問題を特定する

設定が保存されない

原因:nonceの検証失敗、権限不足、Settings APIの設定ミス

確認事項:

  • wp_nonce_field()wp_verify_nonce() のアクション名が一致しているか確認
  • settings_fields() の引数(オプショングループ名)が register_setting() と一致しているか確認
  • フォームの action 属性が options.php になっているか確認
  • current_user_can('manage_options') が true になっているか確認

カスタム投稿タイプのURLが404になる

原因:パーマリンクがリセットされていない

解決策:

  • 管理画面の「設定」→「パーマリンク」を開いて「変更を保存」をクリック
  • または有効化フックで flush_rewrite_rules() を呼ぶ(重いので有効化時のみ)
register_activation_hook( __FILE__, function() { mfp_register_post_type(); // カスタム投稿タイプを登録 flush_rewrite_rules(); // パーマリンクをリセット } ); register_deactivation_hook( __FILE__, function() { flush_rewrite_rules(); } );

AJAXリクエストが 0 または -1 を返す

原因:nonce検証失敗・アクション名の不一致・wp_ajax フックが登録されていない

確認事項:

  • wp_ajax_{action}wp_ajax_nopriv_{action} の両方を必要に応じて登録する
  • JavaScriptで渡す nonce と PHP側で検証するアクション名が一致しているか確認
  • admin_url('admin-ajax.php') が正しいURLか確認
  • 最後に wp_die() を呼んでいるか確認(ないと末尾に 0 が付く)

「Fatal error: Allowed memory size exhausted」

原因:PHPのメモリ制限に達した

解決策:

  • wp-config.phpに define('WP_MEMORY_LIMIT', '256M'); を追加
  • ループ内で大量のデータを取得していないか見直す
  • numberposts を -1(無制限)にしていないか確認

🔍 デバッグツール一覧

Query Monitor(プラグイン)

開発中の必須プラグイン。SQLクエリ数・実行時間・フック・HTTP API・エラーをリアルタイム表示。

wp-config.php デバッグ設定

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

error_log() で変数確認

error_log( print_r( $variable, true ) ); // → wp-content/debug.log に記録される

WP-CLI でデバッグ

# ログをリアルタイムで確認 tail -f wp-content/debug.log # エラーを出力しながら実行 wp eval 'mfp_some_function();' --debug

⚙️ よくある設定ミスチェックリスト

コードを書いたら確認すること

  • すべてのPHPファイルの先頭に if ( ! defined( 'ABSPATH' ) ) { exit; } がある
  • 全関数・クラス名に固有の接頭辞が付いている(例: mfp_)
  • フォーム処理で nonce + 権限チェック + サニタイズの3点セットが実装されている
  • 出力時にコンテキストに合ったエスケープ関数を使っている
  • DB操作は $wpdb->prepare() を使っている
  • CSS/JSはwp_enqueue_scripts/admin_enqueue_scriptsで読み込んでいる
  • カスタム投稿タイプ登録後にflush_rewrite_rules()を呼んでいる
  • WP Cronのスケジュールを無効化フックで削除している
  • 本番環境でWP_DEBUGがfalseになっている

🆘 困ったときの情報源

WordPress 公式開発者ドキュメント

developer.wordpress.org — 関数リファレンス・フック一覧・REST APIリファレンスが充実。まず最初にここを確認しましょう。

WordPress Codex / make.wordpress.org

make.wordpress.org — 開発チームのブログ。バージョンアップで変更された仕様や非推奨情報が確認できます。

Stack Overflow

「wordpress」タグで検索すると、エラーメッセージで調べても解決策が見つかることが多いです。英語ですが、コードを示して質問すると親切に回答してもらえます。

WordPress サポートフォーラム

wordpress.org/support/ — 特定プラグインのバグ報告や使い方の質問ができます。プラグインの作者に直接連絡できることもあります。

🔗 関連ページ

🔒 セキュリティ・品質向上

📚 実例で理解を深める