WordPressで次のような call_user_func_array エラーが出ることがあります。これは、add_action() / add_filter() で登録されたコールバック関数をWordPressが呼び出そうとしたが、その関数が見つからない(存在しない・無効)ときに発生します。
Warning: call_user_func_array() expects parameter 1 to be a valid callback, function 'custom_filter_hoge' not found or invalid function name in /wp-includes/class-wp-hook.php on line 308
- 関数名:
'custom_filter_hoge'(この関数が問題) - WordPressがフック実行時に、その名前の関数を呼べなかった
- つまり「登録はされているのに、関数の実体が無い」状態
原因1:関数が存在しない(タイプミス・未定義)
最も基本的な原因は、フックに登録した関数が定義されていないことです。関数名のスペルミスや、関数を書き忘れているケースです。
add_action('init', 'custom_filter_hoge'); // この関数がどこにも無い → エラー
対処は、関数を正しく定義するか、スペルミスを直すことです。
add_action('init', 'custom_filter_hoge');
function custom_filter_hoge() {
// 行いたい処理
}
まずは関数名でプロジェクト全体を検索し、定義(function custom_filter_hoge)が存在するかを確認しましょう。テーマ・プラグイン・functions.php のいずれにも無ければ、未定義が原因です。
原因2:プラグイン削除・関数リネーム後の「孤立フック」(最多)
実務でよくあるのが、関数を定義していたプラグインを無効化・削除した、または関数名を変更(リネーム)したのに、add_action / add_filter の登録だけが残っているケースです。呼び出し先の関数が消えているため、このエラーになります。
残ってしまった
add_action('init', 'custom_filter_hoge'); の行を削除するか、リネームした新しい関数名に書き換えます。別プラグインから登録されている場合は remove_action() / remove_filter() で解除することもできます。フックの仕組みはフィルターフックとは?も参考になります。「関数が存在するときだけ登録する」ようにしておくと、この種のエラーを未然に防げます。function_exists() でガードします。
if (function_exists('custom_filter_hoge')) {
add_action('init', 'custom_filter_hoge');
}
原因3:クラスのメソッドを指定するときの形式ミス
コールバックがクラスのメソッドの場合、関数名の文字列ではなくarray($object, 'メソッド名') の形式で渡す必要があります。これを文字列で書くとコールバックとして無効になり、同じエラーが出ます。
$obj = new My_Class();
// OK:オブジェクトとメソッド名を配列で渡す
add_action('init', array($obj, 'my_method'));
// 静的メソッドの場合
add_action('init', array('My_Class', 'my_static_method'));
原因が特定できないときはWP_DEBUGで調べる
どのフックが問題か分からない場合は、wp-config.php で WP_DEBUG を有効にすると、エラーの詳細(ファイル名・行番号)が表示され、原因を絞り込みやすくなります。
define('WP_DEBUG', true);
define('WP_DEBUG_LOG', true); // wp-content/debug.log に記録
define('WP_DEBUG_DISPLAY', false); // 画面には出さずログに記録
本番サイトでは
WP_DEBUG_DISPLAY を false にして、エラーを画面ではなくログ(wp-content/debug.log)に出すようにしましょう。原因のプラグインを切り分けるには、プラグインを1つずつ無効化して再現するか確認します。画面が真っ白で操作できない場合は画面が真っ白(ホワイトスクリーン)になったときの対処法、「重大なエラー」表示は「重大なエラーが発生しました」の原因と解決方法も参照してください。関連する対処法
よくある質問(FAQ)
add_action() / add_filter() に登録した関数が存在しない、または呼び出し可能でないことです。関数名のスペルミス、関数を定義していたプラグインの無効化・削除、クラスメソッドの指定形式の誤り(array($obj, 'method'))、functions.php の構文エラーなどが原因になります。WP_DEBUG を有効にして表示されるファイル名・行番号を手がかりにします。プラグインを1つずつ無効化して再現する/しないを確認すると、原因のプラグインを絞り込めます。functions.php のフックを新しい仕様に合わせて修正してください。まとめ
このエラーは「登録したフックの関数が見つからない」というサインです。次の順で確認しましょう。
- 関数名で全体を検索し、定義があるか確認(スペルミス・未定義)
- 孤立フックを疑う:プラグイン削除・リネーム後に残った登録を削除/修正
- クラスメソッドは
array($obj, 'method')形式で指定 - 予防:
function_exists()でガードしてから登録 - 切り分け:
WP_DEBUG+ プラグインの個別無効化

