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?


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

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.


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 

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.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.