WordPressで子テーマをカスタマイズ中に、functions.phpをアップしたらサイトが見られなくなった・・・というご相談を頂きました。
ワードプレスで子テーマを使うメリットや、使う際に注意する点をまとめました。
目次
質問:functions.php子テーマにアップロードしたらエラーに
WordPress初心者です。
現在、Lightningテーマを利用中でカスタマイズは子テーマでしております。
今回functions.phpに追加コードを記述をしようと開いたらコードが全て空っぽになっておりました。
そこで、親テーマからfunctions.phpをダウンロードして子テーマにアップロードしたら、
Fatal error: Cannot redeclare lightning_home_content_hidden() ようなエラーが出てサイトが見れなくなりました。
元のfunctions.phpに戻したいのですが、どのようにすればよいかご教示ください。
宜しくお願い致します。
>koto様
ご質問ありがとうございました。
子テーマを作成して使う上で、いつくか注意点があります。
ポイントを解説させて頂きます。
子テーマを作るメリットとは
子テーマを作るメリットは何と言っても親テーマのアップデートの影響を受けにくい点にあります。
親テーマを直接カスタマイズすると、テーマをアップデートした際に変更点が失われて(上書きされて)しまいます。
そのため、既存テーマを利用しサイト運用していくうえでは子テーマを作ることが多いでしょう。
子テーマの作り方
子テーマを作る方法は非常にシンプル。
1.子テーマ用のフォルダを用意する
仮に親のテーマ名をParentTheme
フォルダ名をparent とします。
子テーマ名をChildTheme
フォルダ名をchildとします。
2.style.cssを用意し、先頭行に以下の記述を追加します。
/* Theme Name: ChildTheme Theme URI: Description: Author: Author URI: Template: parent(フォルダ名であることに注意) Version: License: License URI: Tags: Text Domain: */
最低限”Template”で親テーマのフォルダが指定されていれば子テーマは動作するでしょう。
以前は
@import url('../parent/style.css');
のような形でCSSをインポートする形が一般的でしたが、現在は推奨されていません。以下のfunctions.phpを利用する方法がコーデックスで紹介されています。
3.functions.phpを作り親のCSSを読み込む記述を追加
WordPress Codex 子テーマ
同名のファイルがあれば、子テーマのファイルを優先して読み込む
ここまでで、子テーマフォルダの中にはstyle.cssとfunctions.phpしかありません。
子テーマの仕組みは、「まず親テーマが読み込まれ、子テーマに同名のファイルがあればそれが読み込まれる」と考えて頂ければスムーズです。
親テーマにも子テーマにもfooter.phpがある場合、子テーマのfooter.phpが優先されます。
カスタマイズしたいテンプレートファイルだけを子テーマにコピーしてカスタマイズするという流れになります。
functions.phpの扱いについて
ただし、functions.phpは単なる上書きではなく、親テーマのfuctions.phpにある関数も、子テーマのfuctions.phpにある関数も両方読み込まれます。
そのため、質問者様のように親テーマのfunctions.phpを子テーマにそのままアップロードすると、エラーになります。(同名の関数が2回実行されることになる)
子テーマがご自身で作成されたのか、誰かに依頼したのか、僕はLightningを使ったことがないのでわかりませんが、子テーマのfunctions.phpはおそらくデフォルトではほとんどが空白であると思われます。
空白のfnctions.phpに、追加したい関数を記述する方法になるでしょう。
こちらもやはりコーデックスをご一読頂いた方が良いかと思います。
ご参考になれば幸いです。