Preservando configurações de tema no tema filho

10

Meu cliente usa o tema Karma com muitas configurações nas opções de tema. Preciso manter minhas adições de CSS e PHP em um tema filho, para que as atualizações do tema não acabem. No entanto, quando seleciono meu tema filho em Aparência> Temas, as principais configurações de tema desaparecem.

Existe alguma maneira de preservar as principais configurações de tema?

drake035
fonte
o que você quer dizer com "ido"? Se você pode voltar para o tema pai e a configuração estão lá, então eles não se foram
Mark Kaplun
Foi do painel e do site. Eles ainda existem em algum lugar do banco de dados, mas isso não é relevante para o meu problema.
precisa saber é o seguinte
então qual é o seu problema? você perguntou "Existe alguma maneira de preservar as principais configurações de tema?" e uma vez que eles ainda estão no DB eles são preservados
Mark Kaplun
Significado "preservado" presente no tema filho. Ao alternar do tema pai para filho, desejo que as configurações filho sejam iguais às configurações pai.
precisa saber é o seguinte
depois copie-os. Tenho que admitir que ainda não entendi exatamente qual é o problema que você está tentando resolver. parece que você está tentando complicar sua vida, ou sua abordagem de criar um tema filho está errada e é melhor modificar o tema pai (ou pode ser que o tema pai não seja adequado para ser usado em temas filhos)
Mark Kaplun

Respostas:

9

Devido à maneira como essas configurações de tema são armazenadas como uma matriz no banco de dados, pode ser difícil copiá-las com apenas copiar e colar no phpmyadmin ou alguma tática semelhante.

O comando da opção WP CLI é seu amigo aqui. Se você ainda não usa o WP CLI, confira! Veja como eu copiei as configurações do tema da montra para um tema chamado storefront-sqcdy-child:

# save the existing theme settings in json format in a temporary text file
wp option get theme_mods_storefront --format=json > theme_mods_storefront.txt

# load the saved settings into the child theme option record in the database
wp option update theme_mods_storefront-sqcdy-child --format=json < theme_mods_storefront.txt

# cleanup the temp file
rm -f theme_mods_storefront.txt
squarecandy
fonte
Como segunda linha você deve usar um tubo muito wp atualização opção theme_mods_storefront-sqcdy-criança --format = json <theme_mods_storefront.txt
Gregor
Sim, eu acho que é uma maneira mais padrão para fazê-lo ...
squarecandy
Olá pessoal, você disse "pode ​​ser difícil copiá-los com apenas copiar e colar", mas a operação que você executa me parece a mesma. Estou errado?
Marco Panichi
@MarcoPanichi - é definitivamente diferente, porque o WP CLI faz um monte de coisas sofisticadas que você nunca vê de serializar / re-serializar dados da maneira correta. Se você apenas copiar os valores e tentar mudar as coisas diretamente no banco de dados com comandos MySQL ou phpmyadmin, provavelmente irá estragar tudo.
Squarecandy
Tenho certeza de que, com seus comandos get [atualização] para [a partir] de um arquivo, você está fazendo a mesma coisa
Marco Panichi
6

As modificações do tema do Wordpress são salvas na wp_optionstabela do banco de dados no theme_mods_{themename}campo. Você pode copiá-lo e renomear usando o nome do tema filho.

andrejm
fonte
11
E quando o tema pai é atualizado e adiciona novas opções, o que você faz então?
precisa
11
Qual é a melhor opção @MarkKaplun? Eu acho que isso resolve o problema que o usuário está pedindo
Eoin
11
@ Em quanto mais perguntas eu leio sobre temas infantis, menos eu gosto das limitações dele. Parece que, para qualquer alteração não trivial no tema pai, você terá que reavaliar o código do tema filho. Se tudo o que você faz é CSS, há pouco problema, mas para qualquer outra coisa é necessária uma reavaliação. o OP aqui precisará garantir que ele sincronize as opções com o tema pai em cada atualização (caso uma nova opção com valor padrão não vazio tenha sido adicionada). Me pego defendendo contra o uso de temas filhos e, em vez disso, uso o git para ramificar o "pai" e fazer mesclagens quando houver atualizações.
precisa
Quando você diz, renomeie usando o nome do tema filho, que nome específico você quer dizer? Não entendo de onde obter o nome do tema filho.
@fuddin o nome do tema é o nome da pasta do tema filho; por exemplo: as configurações do tema pai são identificadas pela opção_name 'theme_mods_parent-theme-name'; as configurações do tema filho podem ser identificadas pela opção_name 'theme_mods_parent-theme-name-child'. Você pode executar uma seleção no seu banco de dados para ver isso claramente:SELECT * FROM wp_options WHERE option_name LIKE "theme_mods_%"
Marco Panichi
1

Eu resolvi simplesmente copiando as opções no banco de dados .

Aqui está o procedimento passo a passo :

  1. Entre no seu phpMyAdmin e selecione o banco de dados do webiste
  2. Faça backup do banco de dados
  3. Execute esta consulta para ter uma visão clara da situação SELECT * FROM wp_options WHERE option_name LIKE "theme_mods_%":; esta instrução retornará uma linha para cada tema que você ativou em seu site até o momento
  4. Modifique a linha das configurações do tema pai, identificadas por option_name = theme_mods_parent-theme-name
  5. Aqui, no campo option_value, você tem todas as configurações do tema pai em um formulário serializado; copie-os; você pode usar uma ferramenta de desserialização para ver o conteúdo de forma amigável ao ser humano
  6. Volte ao ponto 3, mas agora modifique a linha das configurações do tema filho
  7. Cole as configurações que você copiou anteriormente no campo option_value; Salve 
Marco Panichi
fonte
0

Você pode fazer algo como o que os temas filhos do Genesis incluem para salvar as configurações padrão do tema ao ativar e alternar temas:

//* Theme Setting Defaults
add_filter( 'genesis_theme_settings_defaults', 'child_theme_defaults' );
function child_theme_defaults( $defaults ) {

    $defaults['blog_cat_num']              = 6;
    $defaults['content_archive']           = 'full';
    $defaults['content_archive_limit']     = 150;
    $defaults['content_archive_thumbnail'] = 0;
    $defaults['image_alignment']           = '';
    $defaults['image_size']                = 'entry-image';
    $defaults['posts_nav']                 = 'prev-next';
    $defaults['site_layout']               = 'full-width-content';

    return $defaults;

}

//* Theme Setup
add_action( 'after_switch_theme', 'child_theme_setting_defaults' );
function child_theme_setting_defaults() {

    if( function_exists( 'genesis_update_settings' ) ) {

        genesis_update_settings( array(
            'blog_cat_num'              => 6,
            'content_archive'           => 'full',
            'content_archive_limit'     => 150,
            'content_archive_thumbnail' => 0,
            'image_alignment'           => '',
            'image_size'                => 'entry-image',
            'posts_nav'                 => 'prev-next',
            'site_layout'               => 'full-width-content',
        ) );

    } else {

        _genesis_update_settings( array(
            'blog_cat_num'              => 6,
            'content_archive'           => 'full',
            'content_archive_limit'     => 150,
            'content_archive_thumbnail' => 0,
            'image_alignment'           => '',
            'image_size'                => 'entry-image',
            'posts_nav'                 => 'prev-next',
            'site_layout'               => 'full-width-content',
        ) );

Claramente, você precisaria modificar esse código para trabalhar com a funcionalidade de seus temas.

Brad Dalton
fonte