この最小の子テーマがアクティブになっているサイトは、親テーマとはまったく異なります。背景画像とヘッダー画像がなくなり、2015年の親テーマでは(デフォルトでは)アクティブではなかった、あらゆる種類のサイドバー(またはヘッダー)ウィジェットがアクティブになりました。
2015テーマ用にカスタマイズされた設定がいくつかあるだけの、サイトのオリジナルの外観:
このサイトは2015年のテーマから派生した子テーマを表示しています。この子テーマはstyle.css
に必要なヘッダーのみを持ち、そのfunction.php
のCodexの子テーマページで提案されているスタイルのみをエンキューします。
子テーマをアクティブにしても親テーマのカスタマイズとデフォルトが維持されるようにするにはどうすればよいですか。
この場合は、ヘッダーと背景の写真、およびデフォルトの(サイドバー/ヘッダー)ウィジェットの削除(無効化?)。
ノート
すでにカスタマイズされたテーマの子テーマを作成する は重複しているように思えるかもしれませんが、それはテーマのファイルを編集することによるカスタマイズについてです。
この質問 子テーマをアクティブにするとき、どのカスタム設定をリセットする必要があるのでしょうか?カスタムメニューなど? 私は後になっていると思うものを正確に尋ねるようです。私の場合はそうではありませんし、同じ効果に対するOPのコメントを拾いませんでした。
私も見ました
私は @ webtoureの答えに+1を与えました それはあなたに正しい方向を与えるので、しかし私はそれがいくつかのチェックを欠いていると思います。
まず最初に、アクティブ化されているテーマが子テーマであることを確認しません。また、以前にアクティブ化されていたテーマがアクティブ化されている子テーマの親テーマであることを確認しません。
私のOPの理解によれば、これらの条件は必須です。
さらに、考慮しなければならない問題の1つは、アクティブになっている子テーマのテーマmodがすでに存在する場合、それらをどうするかです。
@webtoureの答えでは、それらは状況によってはあなたを救うかもしれないバックアップに保存されますが、WordPressはデフォルトでそれらを認識しないので、それらは使用される追加のコードを必要とします。
私はそれが親のテーマだけからテーマの変更を継承する方が良いと思います 初めて 子テーマがアクティブになります。
手短に言えば、親テーマからテーマMODを継承するために私が前にチェックしたい条件は以下のとおりです。
WordPressはこのチェックを行う方法を提供していないので、2番目の条件を保証するために私はカスタムオプションを使用します。
これがコードです。何が起こっているのか説明するためにインラインコメントを読んでください。
add_action( 'switch_theme', function( $new_name, \WP_Theme $new_theme ) {
// get the previously active theme
$previous = get_option( 'theme_switched', -1 );
// get the parent of current theme, will be false if no parent
$parent = $new_theme->parent() ? $new_theme->get_template() : false;
// current stylesheet name
$stylesheet = get_option( 'stylesheet' );
// has the theme being activated ever been activated before?
$lastActive = get_option( $stylesheet . '_last_active', false );
// if previouly active theme is the parent of the the child theme being activated
// and it has never been activated before..
if ( ! $lastActive && $parent === $previous ) {
// update "last_active" option so following code won't run again for this theme
update_option( $stylesheet . '_last_active', current_time( 'timestamp', 1 ) );
// get the theme mods of the parent
$previousMods = get_option( 'theme_mods_' . $parent, array() );
// inherit current theme mods from parent theme mods
update_option( 'theme_mods_' . $stylesheet, $previousMods );
}
}, 10, 2 );