Preservare le impostazioni del tema nel tema figlio


10

Il mio cliente usa il tema Karma con molte impostazioni nelle opzioni del tema. Devo mantenere le mie aggiunte CSS e PHP in un tema figlio in modo che gli aggiornamenti del tema non lo cancellino. Tuttavia, quando seleziono il tema figlio in Aspetto> Temi, le impostazioni del tema principale scompaiono.

Esiste un modo per preservare le impostazioni principali del tema?


cosa intendi con "sparito"? Se riesci a tornare al tema principale e le impostazioni sono lì, allora non sono più scomparse
Mark Kaplun,

Andato dalla dashboard e dal sito Web, cioè. Esistono ancora da qualche parte nel database, ma non è rilevante per il mio problema.
drake035,

quindi qual è il tuo problema? hai chiesto "Esiste un modo per preservare le impostazioni principali del tema?" e poiché sono ancora nel DB sono conservati
Mark Kaplun il

Significato "conservato" presente nel tema figlio. Quando si passa dal tema padre a figlio, voglio che le impostazioni figlio siano le stesse delle impostazioni padre.
drake035,

quindi copiarli. Devo ammettere che ancora non capisco qual è esattamente il problema che stai cercando di risolvere. sembra che tu stia cercando di complicarti la vita, o che il tuo approccio nel fare un tema figlio sia sbagliato e tu modifichi meglio il tema genitore (o potrebbe essere che il tema genitore non sia adatto per essere usato per temi figlio)
Mark Kaplun

Risposte:


9

A causa del modo in cui queste impostazioni dei temi sono archiviate come array nel database, può essere difficile copiarle semplicemente copiando e incollando in phpmyadmin o qualche tattica simile.

Il comando di opzione CLI WP è il tuo amico qui. Se non usi già WI CLI, dai un'occhiata! Ecco come ho copiato le impostazioni dal tema dello storefront a un tema chiamato 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

Come seconda riga dovresti usare anche una pipe wp opzione update theme_mods_storefront-sqcdy-child --format = json <theme_mods_storefront.txt
Gregor

Sì, suppongo che sia un modo più standard per farlo ...
Squarecandy

Ciao squarecandy, hai detto "può essere difficile copiarli con il solo copia e incolla", ma l'operazione che esegui mi sembra la stessa. Ho sbagliato?
Marco Panichi,

@MarcoPanichi - è decisamente diverso perché la CLI di WP fa un sacco di cose fantasiose che non vedi mai serializzare / ri-serializzare i dati nel modo corretto. Se copi semplicemente i valori e provi a cambiare le cose direttamente nel database con i comandi MySQL o phpmyadmin, probabilmente sbaglierai le cose.
squarecandy

Sono abbastanza sicuro che con i tuoi comandi ottieni [aggiorna] in [da] un file, stai facendo la stessa cosa
Marco Panichi,

6

Le modifiche al tema Wordpress vengono salvate nella wp_optionstabella del database nel theme_mods_{themename}campo. Puoi copiarlo e rinominarlo usando il nome del tema del tuo bambino.


1
E quando il tema principale si aggiorna e aggiunge nuove opzioni, cosa fai allora?
Mark Kaplun,

1
Qual è un'opzione migliore @MarkKaplun? Penso che questo risolva il problema che l'utente sta chiedendo
Eoin

1
@Eoin più domande leggo sui temi dei bambini, meno mi piacciono i limiti. Sembra che per qualsiasi cambiamento non banale nel tema principale dovrai rivalutare il codice del tema figlio. Se tutto ciò che fai è CSS, c'è poco problema, ma per qualsiasi altra cosa è necessaria una rivalutazione. l'OP qui dovrà assicurarsi di sincronizzare le opzioni con il tema principale su ogni aggiornamento (nel caso in cui sia stata aggiunta una nuova opzione con un valore predefinito non vuoto). Mi trovo a difendere l'uso dei temi figlio, e invece utilizzo git per ramificare il "genitore" e fare fusioni quando ci sono aggiornamenti.
Mark Kaplun,

Quando dici, rinomina usando il nome del tema figlio, quale nome specifico intendi? Non capisco da dove ottenere il nome del tema del bambino.

@fuddin il nome del tema è il nome della cartella del tema figlio; ad esempio: le impostazioni del tema principale sono identificate dal nome_opzione 'nome_modello_modello'; le impostazioni del tema figlio potrebbero essere identificate dal nome_opzione 'tema_mods_parent-tema-nome-figlio'. È possibile eseguire una selezione sul database per visualizzarlo chiaramente:SELECT * FROM wp_options WHERE option_name LIKE "theme_mods_%"
Marco Panichi,

1

Ho risolto semplicemente copiando le opzioni nel database .

Ecco la procedura dettagliata :

  1. Accedi al tuo phpMyAdmin e seleziona il database del webiste
  2. Eseguire il backup del database
  3. Eseguire questa query per avere una visione chiara della situazione SELECT * FROM wp_options WHERE option_name LIKE "theme_mods_%":; questa istruzione restituirà una riga per ogni tema che hai attivato finora sul tuo sito web
  4. Modifica la riga delle impostazioni del tema principale, identificata da option_name = theme_mods_parent-theme-name
  5. Qui, nel campo option_value, hai tutte le impostazioni del tema principale in una forma serializzata; copiarli; puoi usare uno strumento non serializzato per vedere il contenuto in una forma a misura d'uomo
  6. Torna al punto 3, ma ora modifica la riga delle impostazioni del tema figlio
  7. Incolla le impostazioni che hai copiato in precedenza nel campo option_value; Salva

0

Puoi fare qualcosa di simile a ciò che includono i temi figlio di Genesis per salvare le impostazioni predefinite del tema quando attivi e cambi temi:

//* 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',
        ) );

Chiaramente dovresti modificare questo codice per lavorare con la funzionalità dei tuoi temi.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.