子テーマを作成して、親テーマからファイルをコピペしたが、コピペしただけでは、反映されなかった。そのため、子テーマのfunctions.phpにrequire_onceでファイルを読み込ませてみたがエラーになったという人のための解決方法です。
結果から言うと、親テーマ側でrequire_onceで読み込んでいるファイル(またファイル内の関数)を子テーマ側で上書きすることはできません。
まず、エラーとなっている原因を確認します。
Contents
関数名が重複してエラーになる
WordPressの初期設定では、エラー内容は非表示になっているので、デバッグフラグをONにして確認します。エラーが表示されてしまうので、本番環境ではなくテスト環境のWordPressでやること。
require_onceでエラーになる原因は、ほとんどの場合、すでに宣言済みの関数が存在するというエラーです。
【エラーの例】
- 親テーマにあるファイルを子テーマ側のフォルダにコピー
- 子テーマのfunctions.phpでrequire_onceでファイルを読み込む
- 「このページは動作していません」やページが真っ白になるなどのエラーが発生する
子テーマを作成した場合、読み込み順は、子テーマが先、親テーマが後の順で読み込まれます。functions.phpも子テーマが先に読み込まれます。
エラーの原因は、後から読み込まれる親テーマがrequire_onceで子テーマディレクトリのファイルを指しており、先に子テーマでrequire_onceして読み込んだファイルの関数(function)名と重複してエラーになります。
関数名を変えて対応する
最初に書いた通り、同じ場所のファイルをrequire_onceで読み込んで、ファイル(またファイル内の関数)を上書き(オーバーライド)することはできません。
子テーマ側で親テーマ側のrequire_onceのファイルを上書きしたり、読み込まないようにすることはできないので、関数名を変える方法が手っ取り早いです。
やり方は、まず、親テーマの該当ファイル(①)を子テーマにコピペで持ってきます。次に、エラーとなっている関数名を特定します。
関数名が分かったら、その関数名を変更します(_Childなどをつけるなどして区別できるようにします)。そして、名称変更した関数を使っているファイル(②)も親テーマから子テーマにコピーし、関数名の部分を修正します。
子テーマのfunctions.phpで①のファイルをrequire_onceで読み込ませます。必要な修正が反映されれば成功です。
親テーマは変更せずに子テーマだけで修正できます。ただし、②もrequire_onceで読み込まれていると、雪だるま式に修正が増えてしまう可能性もあります・・・。