親テーマのrequire_onceで読み込んでいるファイルを子テーマで上書き(オーバーライド)したい

当サイトはアフィリエイト広告を利用しています。

子テーマを作成して、親テーマからファイルをコピペしたが、コピペしただけでは、反映されなかった。そのため、子テーマのfunctions.phpにrequire_onceでファイルを読み込ませてみたがエラーになったという人のための解決方法です。

結果から言うと、親テーマ側でrequire_onceで読み込んでいるファイル(またファイル内の関数)を子テーマ側で上書きすることはできません。

まず、エラーとなっている原因を確認します。

関数名が重複してエラーになる

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で読み込まれていると、雪だるま式に修正が増えてしまう可能性もあります・・・。

-ワードプレス
-,