WordPressの「Fatal error: Cannot redeclare」エラーって何だろう?

WordPressの「Fatal error: Cannot redeclare」エラーって何だろう?






こないだ、WordPressのfunction.phpにコードを追加したら「Fatal error:Cannot redeclare add_stylesheet()」というエラーが出てサイトが表示されなくなりました。

追加したコードを消したファイルを再アップロードしたら問題なくサイトが閲覧できたことを考えると、追加したコードに問題があった事がわかります。

という事で「Fatal error:Cannot redeclare」エラーが何なのか調べてみました。

今回追加したコード

CSSとJavaScriptを読み込むために、function.phpに以下のようなコードを追加しました。

Animate.css と wow.js を読み込むコードを追加したつもりだったけど一体何が問題なのか。
理由がわからなかったので、同じコードを別のサイトに追加してみたところ、普通にサイトが表示されたしアニメーションも問題なく動いていました。

まぁ悩んでいても答えが出ないので、ちょいと調べてみることにします。

スクロールと連動するアニメーションは「Animate.css + wow.js」で決まり!

2018.11.10

「redeclare」の意味って何だろう

あれこれ調べる前に、とりあえず「redeclare」の意味って何?と疑問に思いGoogle先生に聞いてみたところ…

redeclare-再宣言

なるほど「再宣言」とな?

再宣言…再宣言…

Fatal error:Cannot redeclare add_stylesheet()」というエラーだったから、どこかで add_stylesheet()関数が使われてるって事かい?

当然、子テーマのfunction.phpには同じコードは記述してないので、親テーマのfunction.phpに同じ関数がないかチェックしてみます。

CSS読み込み

add_stylesheet()関数がありました!

同様にadd_script()関数もみてみると…

JS読み込み

やっぱりありました。
既に親テーマの方で、add_action関数を使って外部ファイルを読み込んでいたんですね。

という事で、Animate.css と wow.js を読み込むための関数が、親テーマと子テーマで重複していた事が原因だったようです。

自分はPHPに関してあまり詳しくないので、「Fatal error: Cannot redeclare」について他サイトさんから引用させていただきます。

PHPの「Fatal error: Cannot redeclare 関数()…」のエラー解消方法

たくおノートさん
Fatal error: Cannot redeclare 関数() (previously declared in 関数を定義したファイルのパスとライン)のエラーは同名の関数が既に定義済みである場合に起こる。
よって、同名の関数を使用していないかどうかをチェックしてみよう。

要するに、親テーマと子テーマで同じ関数名は使えないって事ですか。知らんかった。

子テーマから親テーマのfunctions.phpを変更する

子テーマから関数を上書きする方法について紹介している別のサイトさんがあったので、親テーマ側で記述の変更をしたくないという方は参考にしてください。

[WordPress] 子テーマから親テーマのfunctions.phpを変更する

WEBPAPRIKA
子テーマは親テーマを継承しますが、functions.phpに書いてある内容を変更したい、または削除したい場合があります。
同じ関数名を子テーマに書いて上書きを試みると、「Fatal error: Cannot redeclare」エラーになります。
参考:Overriding WordPress Functions | venutip.com
エラーを回避するには、親テーマでadd_actionされている関数を子テーマでremove_actionしてから別名でadd_actionします。

WEBPAPRIKAさんの記事をみる限り、子テーマ側から重複している関数を削除し、別名で定義した関数をadd_actionするという認識であっていると思います。

親テーマで既に定義してある関数をい変更してもいいんですが、やっぱり子テーマから上書きできた方が安心できますね。

まとめ

結論として「Fatal error: Cannot redeclare<」は同名の関数を使っていると出るエラーで、同名の関数を使用しない事が解決方法という事ですね。

HTMLとCSSに関しては慣れているので、何となく問題の原因がわかるのですが、PHPはまだまだ理解していないことも多いので、突然エラーコードが出ると焦ります。

もっと勉強しなければ…

『WordPressの「Fatal error: Cannot redeclare」エラーって何だろう?』でした。

WordPressでCSSやjQueryを読み込む時はfunction.phpが便利!

2017.11.23






WordPressの「Fatal error: Cannot redeclare」エラーって何だろう?