wordpress 子テーマとは
別のテーマ(親テーマ)の内容を定義して、上書き(オーバーライド)するテーマ。
wordpress 子テーマを利用するメリット
テーマのファイルを直接編集してカスタマイズする場合、そのテーマをバージョンアップした時、編集した箇所は全て消えてしまいます(/ω\)
カスタマイズしたい内容を、「子テーマ」に定義することで、親テーマをバージョンアップしても、子テーマの内容は保持されます。
■■■WordPress 子テーマを作成する為の準備■■■
まずは専用のディレクトリを作成。
「wordpress/wp-content/themes」以下に、アップロード。
ディレクトリ名は任意。(※「●●●」は親のテーマ名」)
分かりやすいように「●●●_kids」や「●●●_kids」等とする。
次に、そのディレクトリ内に、子テーマのファイルを作成。
【必須】
style.css
【カスタマイズする場合のみ】
functions.php」 :
各テンプレートファイル(header.phpやfooter.php、single.php等)
■■■style.css の設定手順■■■
子テーマのディレクトリ内の「style.css」は、「●●●(親テーマ)の、子テーマです」と宣言する為に必須。
/*
Template:twentytwelve
Theme Name:twentytwelve_kids
Description:twentytwelve の子テーマです
Author:子テーマの作者
Version:1.0
*/
【説明】
「Template」 : 親テーマのディレクトリ名 ※必須
「Theme Name」 : 子テーマの名前 ※必須
「Description:」 : 子テーマの説明
「Author」 : 子テーマの作者
「Version」 : 子テーマのバージョン
※親テーマのディレクトリ名は大文字・小文字を区別する。
一から定義すると大変なので、親テーマの内容を一旦読み込んでからカスタマイズ部分のみ記載したいので1行追記。
親テーマの内容を読み込む処理が、以下の「@import url」。
/*
Template:twentytwelve
Theme Name:twentytwelve_kids
Description:twentytwelve の子テーマです
Author:子テーマの作者
Version:1.0
*/
@import url(“../●●●/style.css”);
/* 以下、カスタマイズ内容を書く */
「style.css」作成後には「子テーマ」を有効化。
Wordpressの管理画面メニューから「外観」→「テーマ」を選択。
テーマ 一覧画面が開いたら、追加されている「子テーマ」を有効化。
■■■各テンプレートファイルの設定方法■■■
header.phpやfooter.php、single.phpなどの設定方法。
まずは、カスタマイズしたいファイルを、そのまま「子テーマ」のディレクトリにアップ。
「header.php」をカスタマイズしたいのであれば、「header.php」を新規作成してアップ。
「子テーマ」として認識させるファイルは、”カスタマイズしたいファイル” なので、ファイル名は、必ず親テーマと同じ名前を定義。
※WordPress本体は、最初に「親テーマ」を読み込み→次に「子テーマ」に配置されているファイルを読み込む。
header.phpやfooter.phpなどの、テンプレートファイルは、「style.css」と同じで、親テーマのファイルを、全て上書き。
※一般的には、親テーマの内容を全コピーして、カスタマイズしたい部分だけ、変更・追記していく方が分かりやすい。と思う。
※「追記」のみの場合は、下記処理によって、親テーマのファイル内容を読み込んで、以降の行で、独自の処理を追記していくことで、明示的にカスタマイズ部分を特定する事ができる。
include(TEMPLATEPATH . ‘template-name.php’);
load_template(TEMPLATEPATH . ‘/template-name.php’);
■■■function.php■■■
【注意】function.php は、”「子テーマ → 親テーマ」の順に読み込まれるので、全上書き されない!”
子テーマの「function.php」には、純粋にカスタマイズしたい内容のみ記述していけば良い。しかし既存テーマ(親テーマ)の処理を変更したい場合は、親テーマの変更箇所(関数)を、削除(remove)する処理が必要。
親テーマのphp内にtheme_custom()関数が記述されており、この関数をカスタマイズしたいとしましょう。
まず関数を丸ごと子テーマのfunctions.phpの下の方にでもコピペして関数名を変更。ここではtheme_custom_kids()とする。
次に親関数のremove、子functions.phpは親functions.phpの直前に実行されるため、子functions.phpの実行時点では親の関数をremoveすることができない。そこで「親テーマの関数のremoveを行う関数を定義」し、「WordPressのinit時にremove関数が実行されるよう登録」する。
テーマ用関数は大抵、宣言の前後にadd_actionの記述があり、これによって呼び出しが登録されているので、remove_actionを使ってadd_actionと逆のことを行う。
例えばtheme_custom()関数が以下のようにadd_actionされていたとする。
add_action('header','theme_custom',3);
この場合、theme_custom()をremoveするコードは、
/*親テーマの関数をremoveする関数*/
function remove_parent_theme_actions() {
remove_action('header','theme_custom',3);
}
/*上記の関数をWordPressのinitに登録*/
add_action('init','remove_parent_theme_actions');
remove_action()の引数は、親テーマのadd_action時と同じにする。
3番目の引数は優先度で、add_action時に省略されている場合もある。省略されていない場合は同じ値をremove_action時に指定。
次に最初に作った子テーマの関数をaddする。これもadd_actionによって同じように行う。
add_action('header','theme_custom_kids', 3);
まとめると、子テーマのfunctions.phpは以下、
/*親テーマの関数をremoveする関数*/
function remove_parent_theme_actions() {
remove_action('header','theme_custom',3);
}
/*上記の関数をWordPressのinitに登録*/
add_action('init','remove_parent_theme_actions');
/*カスタマイズした関数を有効化する*/
add_action('header','theme_custom_kids', 3);
/*カスタマイズした関数*/
function theme_customa_kids(){
/*関数の中身*/
}
以上の方法で、親テーマのファイルに一切手を加えることなく、theme_custom()の挙動をtheme_customa_kids()で定義された内容に変えることができます。
書き換える関数が複数あっても、やり方は同じです。