先日WordPressのテーマ、OnePressというテーマをカスタマイズする機会がありました。
その時にcall to undefined function add_action()というエラーが表示されたので解決方法を説明します。
子テーマでやろうとしたこと
子テーマでやろうとしたことはヘッダーナビにボタンを実装することでした。調べてみると、テーマのincフォルダに「template-tags.php」があったので、その子テーマを作成して編集することにしました。
その時にcall to undefined function add_action()が表示されました。
子テーマを作成する際、functions.phpの上書きをされないようにfunction_exists()や優先度の問題はつきものですが、そもそもadd_action自体が使えないぽい。
僕がいつも使用していて、全くテーマに関係ないadd_actionを試してみたのですが、全く同じエラーが表示されました。
え、なんで?
読み込みをget_template_partに変更
もう一度テーマを調べてみます。すると「template-tags.php」はrequireでfunctions.phpに読み込まれていました。
require get_stylesheet_directory_uri() . '/inc/template-tags.php';
それをget_template_partに変更しました。子テーマのfunctions.phpに下記を追加しました。
get_template_part('inc/template-tags');
さいごに
function_exists()や優先度は正しいのにテーマによってできない場合は、includeやrequireを確認してget_template_partに変更も試してみましょう。