Eu dei +1 para a @webtoure's answer porque ela te dá a direção certa, no entanto eu acho falta algumas verificações.
Em primeiro lugar, ele não verifica se o tema que está sendo ativado é um tema filho e não verifica se o tema anteriormente ativo é o tema pai do tema filho que está sendo ativado.
Por minha compreensão do OP, essas condições são necessárias.
Além disso, um problema que você precisa levar em conta é o que fazer com os mods do tema do tema filho que estão sendo ativados, se já existirem.
Na resposta do @webtoure, eles são armazenados em um backup, que pode salvá-lo em algumas circunstâncias, mas o WordPress não os reconhecerá por padrão e, portanto, precisará de algum código adicional a ser usado.
Acho que seria melhor herdar as modificações do tema do tema pai apenas na primeira vez em que um tema filho é ativado.
Em resumo, as condições que desejo verificar antes para herdar mods de tema do tema pai são:
- o tema anteriormente ativo deve ser o pai do tema filho que está sendo ativado
- o tema filho que está sendo ativado nunca foi ativado antes
Para garantir a segunda condição, usarei uma opção personalizada, porque o WordPress não oferece uma maneira de fazer essa verificação.
Este é o código, por favor, leia os comentários em linha para obter explicações sobre o que está acontecendo:
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 );