functions.phpを子テーマのフォルダにコピーすると画面が真っ白に!

WordPress個別サポート

子テーマを使ってWordPressをカスタマイズするときは、使いたいテンプレートファイルを子テーマにコピーして直すというのが一般的なイメージです。

たとえば、個別記事のレイアウトを修正したい場合はsingle.phpを子テーマフォルダにコピー、固定ページを直したい場合はpage.phpをコピーして編集します。

ただし、functions.phpだけは要注意です。親テーマのfunctions.phpは決して丸ごと子テーマフォルダにコピーしないでください!

 親テーマのfunctions.phpは子テーマフォルダにコピーしてはいけない
親テーマのfunctions.phpは子テーマフォルダにコピーしてはいけない

うっかりコピーしてしまうと間違いなく画面が真っ白になります。または「Fatal error: Cannot redeclare」で始まるエラーメッセージが表示されます。

「Fatal error: Cannot redeclare」と表示される
「Fatal error: Cannot redeclare」と表示される
そんなわけで子テーマのサンプルには空のfunctions.phpが付属していることがあります。親テーマのfunctions.phpを丸ごとコピーせず、サンプルに付属した何も書かれていないfunctions.phpを使ってカスタマイズしていきましょう。

functions.phpの丸ごとコピーが禁止な理由

functions.phpは他のテンプレートファイルと異なり、テーマで使うための機能が定義されています。具体的には「function」という構文で定義されているのがテーマ独自の機能です。試しに、使用中のテーマのfunctions.phpを開いてみると次のような「function」で定義されたコードがいくつも見つかるはずです。

function biz_vektor_wp_css(){
…略…
}

この「function」という構文で定義された機能には固有の名前(ここでは「biz_vektor_wp_css」)が付いており、その名前を呼び出すことで命令が実行されます。

正しく命令を実行するにはfunctionで作成した命令の名前が固有であることが必要で、同じ名前の命令が存在した場合は、どちらの命令を実行するのか判断できないためにエラーになります。

ちなみに、エラーメッセージの「Cannot redeclare」とは「同じ名前の命令は再定義できません」という意味です。

もう理解できたと思いますが、親テーマのfunctions.phpを丸ごと子テーマフォルダにコピーした瞬間に、同じ名前のfunctionが膨大に作成されることになるのでエラーが発生して画面が真っ白になります。

ご注意ください!

2016年5月30日WordPressトラブル子テーマ