子テーマでハマった話

テーマをだいぶいじりまわした後、Wordpressでは子テーマなるものが作れるということを知った^^;

テーマのアップデートがあった際、更新してしまうと今までのカスタマイズが全て飛んでしまう。
事前に子テーマを作成し、それにカスタマイズするようにすれば、更新の際でもカスタマイズが飛ばずに済む。
これはWordpressを使うにあたっての常識だったらしい^^;

先人の情報をもとに、/wp/wp-content/themes 内に、空のフォルダーを作成。
”pianoblack”をベースとしているので、”pianoblack_child”とした。
そこに以下の”sytele.css”を作成しアップ。

/*
Theme Name: PianoBlack_Child
Template: pianoblack
*/

以下を追加すれば、オリジナルのスタイルシートを継承できるらしが、だいぶいじった後だったので、
全てコピペした。

@import url('../pianoback/style.css');

これをpianoblack_childフォルダーにアップ。
これで、テーマ一覧に子テーマのPianoblack_childが表示されるので、有効化すればOKらしい。

有効化をポチッと・・・

ひゃー、エラーです・・・
functions.phpでエラーの様です。

ダッシュボードにもアクセス出来ない・・・
Wordpress初心者の私は汗たらたらです^^;
どうしたものかと調べてみると、Wordpress Codex日本語版に次の記載を発見。

テーマの無効化

FTPを使って有効化されているテーマのフォルダ(wp-content/themes内)名を変更します。変更すると、 WordPress は WordPress Twenty Eleven テーマ にテーマを戻します。ログインできたら、別のテーマに変更してください。

FTPクライアントで有効化していたテーマの名前を一時的に変更すると、無事ダッシュボードにアクセスできました。
この間、約30分^^;

functions.phpのエラー箇所を見てみると、次の記述がありました。

// テーマオプション
require_once ( get_stylesheet_directory() . '/admin/theme-options.php' );

// 更新通知
if (strtoupper(get_locale()) == 'JA') {
 require_once ( get_stylesheet_directory() . '/admin/update_notifier_jp.php' );
} else {
 require_once ( get_stylesheet_directory() . '/admin/update_notifier.php' );

テーマのオプションと更新チェックを行っているようですが、
子テーマのadminフォルダーにも”theme-options.php”と”update_notifier_jp.php”が無いとダメなようです。
アップしてやると、無事子テーマを有効化することが出来ました。
このままでは背景が真っ白けだったので、子テーマフォルダーにもimgフォルダーを転送。
テーマオプション、ウェジットがリセットされていたので、再設定。
無事、子テーマ化に成功です^^

さて、安心していると、子テーマの方に更新通知来ました。
子テーマのスタイルシートにバージョンの記載が無いので、アップデートできるよとお知らせが来てしまったのです。
ここで更新をポチッとすると、子テーマをバージョンアップしてしまい、カスタマイズが飛んでしまいます。

そこで、親のfunctuons.phpのバージョンチェックをしている部分をカスタマイズ。
is_child_theme()で子テーマか判定し、子テーマの方にはバージョンチェックしないようにしました。

if (is_child_theme() == false) {
	if (strtoupper(get_locale()) == 'JA') {
 		require_once ( get_stylesheet_directory() . '/admin/update_notifier_jp.php' );
	} else {
 		require_once ( get_stylesheet_directory() . '/admin/update_notifier.php' );
	};
};

ついでにテーマオプションのチェックを親テーマの方を見るようになっているので、子テーマの方を見に行くように変更。
get_template_directory関数をget_stylesheet_directory関数に変えました。

require_once ( get_template_directory() . '/admin/theme-options.php' );

  ↓

require_once ( get_stylesheet_directory() . '/admin/theme-options.php' );

更新通知が消え、めでたしめでたし。

  1. コメントはまだありません。

  1. トラックバックはまだありません。


4 − = 二