WPの

~ワードプレス関連~

子テーマの導入と親テーマへの継承について

      2020/04/25

子テーマの 導入方法

親テーマ 子テーマ

親テーマ のテンプレートファイルやスタイルシート(CSS)を編集してもアップデートすると、初期化され再設定 という状態になり、バックアップしていないと泣きを見ることになります。

それを回避するために 子テーマ(チャイルドテーマ)を 導入 します。

子テーマ(チャイルドテーマ)は、子テーマ内にあるスタイルシートの記述から参照している親テーマの全てをオーバーライド(上書き)します。

WordPressを使うなら、この機能は重要です。しっかり理解しておくとカスタマイズがスムーズにできると思います。

子テーマに必ず必要なファイル

子テーマ

  • style.css

style.css(スタイルシート)のみです。これ以外は、すべて親テーマから引き継ぎます。

style.css の中に必要な記述です。

  • 「Template」 : 親テーマのフォルダ名 ※必須
  • 「Theme Name」 : 子テーマの名前 ※必須
  • 「Theme URI」 : 子テーマのURI
  • 「Description:」 : 子テーマの説明
  • 「Author」 : 子テーマの作者
  • 「Version」 : 子テーマのバージョン

実際の style.css のソースコードです。

/*
Theme Name: X – Child Theme
Theme URI: http://theme.co/x/
Author: Themeco
Author URI: http://theme.co/
Description: Make all of your modifications to X in this child theme.
Version: 1.0.0
Template: x
*/
@import url(”../親テーマ/style.css”);

必ず記述する必要があるのは、親テーマのフォルダ名と子テーマ名(任意)です。

テンプレートファイルは、親テーマ の フォルダ名 で 参照 しています。スタイルシートは @import url(“../親テーマ/style.css”) で参照しています。

しかし、実は @import url(“../親テーマ/style.css”) は、レスポンスが悪くパフォーマンスを悪化させます。

子テーマのスタイルシートから親テーマを参照する 最適 な方法

ここで、次に必要な ファイル がfunction.phpです。

functions.phpとは、WordPressに備わっている機能を呼び出したり(アクションフック)、自作の関数を記述したり出来ます。

子テーマの中にfanctions.phpのファイルを作成して、以下のコードを記述します。

実際のfanctions.phpのソースコードです。


子テーマ内のstyle.cssの冒頭で親テーマを参照する記述です。例:twentyseventeenと子テーマ

/*
Theme Name: twentyseventeen-child
Description: Child theme for the Twenty Seventeen
Author: Your name here
Template: twentyseventeen
*/

ここが重要!
Template: twentyseventeen

試しに、「Template: twentysevente」と
最後のenを削除し外観のテーマを見てみると、親テーマを参照できず、子テーマは「壊れているテーマ」と表示されました。

親テーマを参照出来ず、壊れた子テーマ

有料テーマ制作者が親切に子テーマも配布してくれます。その子テーマでも functions.php によるスタイルシートの参照を行っているので間違いないと思います。

パフォーマンスの向上、表示速度の高速化はSEO対策にもなります。

子テーマ内のファイルによって違う 継承方法 (オーバーライド)について

コーディング

WordPressテーマ内には3種類のファイルが存在します。

  • スタイルシート :style.css
  • テンプレートファイル :index.php,page.php,single.phpなど
  • 関数 :fanctions.php

スタイルシートのルールは、後から読み込んだ方が優先されます。子テーマのstyle.cssは、親テーマのスタイルシートの後に追記していくので、優先されます。

テンプレートファイルは、まず 子テーマの中にファイルがあるかチェックされて、なければ親テーマのテンプレートファイルが使用されます。
例えば、index.phpが子テーマ内にある場合、子テーマのindex.phpが適用され、親テーマのindex.phpは無視されます。

functions.php は特殊でテンプレートファイルやスタイルシートとは違った継承の仕方をします。

最初に子テーマのfunctions.phpが読み込まれて、その後に 親テーマ の functions.php が読み込まれます。

なので、同じ名前の関数を使用した場合、上書きされて効きません。同じ関数名がないコードは上書き可能です。

親テーマのfunctions.phpの関数が

if( ! function_exists ( xxxxxxxx ) ) {
}

で囲まれていた場合は、ラッキーです。上書き可能なので、子テーマへ普通に記述できます。

囲まれない場合のコードは

if ( ! function_exists( 'child_theme_setup' ) {
    function child_theme_setup() {
        add_filter('xxxxx', 'xxxxx');
        remove_filter('xxxxx', 'xxxxx');
    }
}
// 上記の関数を、親テーマの読み込みより後に読み込んでもらう
add_action( 'after_setup_theme', 'child_theme_setup' );

function child_theme_setup() {}の中に記述すればOKです。

テンプレートファイル の一覧は、コチラ。

 - WordPress, テーマ , , , ,