子テーマでハマった話
テーマをだいぶいじりまわした後、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' );
更新通知が消え、めでたしめでたし。
最近のコメント