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()で定義された内容に変えることができます。
書き換える関数が複数あっても、やり方は同じです。

WORDPRESSの再インストールも何度かして色々試したが、いまいち確信が持てず、サポセンにメールしてみたが、知っている内容しか返ってこなかった。

設定方法っていうか検証過程のメモ。

検索すると結構色々設定方法が出てくるから、どれが正しいのか分からなかったので、誰かの役に立つかもしれないので公開。

(ルードディレクトリに入れちゃえばいいのは分かってるんだけど、あえてクイックインストールでサブディレクトリにインストールした場合の検証)

条件
・さくらのレンタルサーバ(スタンダード)
・独自ドメイン
・WORDPRESSは、クイックインストールで、サブディレクトリ(wp)にインストール
 http://hogehoge.com/wp


検索すると良く見かけるのが、

①WORDPRESSでの設定
②index.phpのルートディレクトリへの移動
③マルチドメインの設定


設定の順番は検証のために、あえて

③マルチドメインの設定
①WORDPRESSでの設定
②index.phpのルートディレクトリへの移動

に、してみる。

※「③マルチドメインの設定」を先に行うとWORDPRESSの設定ページにアクセス出来なくなるので、実際は、①②③の順番で設定した方が簡単。
なのだが、
①②③の順番でやると成功したり失敗したりして同じ結果にならない。。。
理由はわからないが、「phpMyAdmin」で「①WORDPRESSでの設定」を行える場合は③①②の方が良さそうだ。

【後述】
「②index.phpのルートディレクトリへの移動」をしなくても普通に表示された。。。)
今回のような場合、さくらに関しては「index.phpのルートディレクトリへの移動」は必要ない!

マルチドメインの設定
クイックインストールされているWordPressは「www/wp」へインストールされているとのことでございますので、独自ドメイン[hogehoge.com]のマルチドメインの対象フォルダを「wp」へ指定いただきますようお願いいたします。

1.サーバコントロールパネルにログイン

2.『ドメイン設定』
 →「マルチドメインの対象のフォルダをご指定ください」にて
  指定フォルダ名「/wp」を記入

3.『送信ボタン』をクリック

4.ドメイン設定画面に戻り、ドメイン名の「パス」欄を確認し
  「/wp」が表示されていれば設定完了

「マルチドメイン」設定の結果
・ルートディレクトリ「hogehoge.com」にアクセスするとCSSが反映されていないような状態でサブディレクトリにあるindex.phpが表示される。
・固定ページへのリンクをクリックすると「http://hogehoge.com/wp/?page_id=10」となり、サブディレクトリがついて表示されNot Foundとなる。
・もちろん管理画面にアクセスするとNot Foundになる。

WORDPRESSでの設定
通常はWORDPRESSの設定から行えば良いのだが、マルチドメイン設定を先に行ったので、ログイン出来ないため、「phpMyAdmin」にて設定する。

optionsのsiteurl=WordPress アドレス (URL) 「http://hogehoge.com/wp」
optionsのhome=サイトアドレス (URL) 「http://hogehoge.com/wp」

となる。

まず、siteurl=WordPress アドレス (URL)のサブディレクトリ「/wp」を削除してみる。

siteurl=WordPress アドレス (URL) 「http://hogehoge.com」
home=サイトアドレス (URL) 「http://hogehoge.com/wp」

・hogehoge.comでCSSなどが反映された。
・管理ページにもログイン出来る。

しかし、
固定ページへのリンクをクリックすると「http://hogehoge.com/wp/?page_id=10」となり、サブディレクトリがついて表示されNot Foundとなる。

解消する為に、home=サイトアドレス (URL) のサブディレクトリ「/wp」を削除してみる。

siteurl=WordPress アドレス (URL) 「http://hogehoge.com」
home=サイトアドレス (URL) 「http://hogehoge.com」

・固定ページへのリンクをクリックすると「http://hogehoge.com/?page_id=10」となり、サブディレクトリが消えて、通常表示されるようになった。

あれ!?ちょっと待て!
「②index.phpのルートディレクトリへの移動」をしなくても普通に表示された。。。orz

index.phpのルートディレクトリへの移動
今回のような場合、さくらに関しては「index.phpのルートディレクトリへの移動」は必要ない!

後記
サポセンって肝心なところをはぐらかしたり、微妙な言い回しにしたりするんだよなぁ。もちろんサポセンにいる全ての人がとは思わないけどさ。
さらにWORDPRESSは、さくらの商品じゃないからそっちのマニュアルを見ろってことも分かる。
今回のことで言えば、クイックインストール出来るようにしてあって、サブディレクトリしかインストール出来ない設定にしてる時点で、この独自ドメインでのアクセス設定は、想定できると思うんだよね

思えば昔ダイアルアップ接続だった時代にインターネットに繋がらず、プロバイダとNTTとPCメーカーの3社のサポセンにたらい回しにされて「もうサポセンに頼るのはやめよう!自分で覚えよう!」って思ったのを思い出した。。。