補足
🔧 トラブルシューティング
プラグイン開発でよく遭遇するエラーと解決法をまとめました。白い画面・プラグイン競合・404エラーなど、困ったときにすぐ参照できるリファレンスです。
🚨 よくあるエラーと解決法
白い画面(White Screen of Death)
原因:PHPの致命的エラー(構文エラー・クラス未定義・メモリ不足など)
解決手順:
- wp-config.phpに
define('WP_DEBUG', true); define('WP_DEBUG_LOG', true);を追加 - wp-content/debug.log の最後のエラーを確認
- FTPで wp-content/plugins/ 内の問題プラグインフォルダを renamed_xxx に変更して無効化
- 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/ — 特定プラグインのバグ報告や使い方の質問ができます。プラグインの作者に直接連絡できることもあります。
🔗 関連ページ
📘 基礎から確認する
- STEP 1: プラグインの基礎知識
- STEP 2: 最小構成プラグインを作る
- STEP 3: 管理画面を作る(nonce・設定保存)
📚 実例で理解を深める
- 実例集(動くコードで確認)
- プラグイン開発ガイド TOP