Préservation des paramètres de thème dans le thème enfant

10

Mon client utilise le thème Karma avec de nombreux paramètres dans les options de thème. Je dois conserver mes ajouts CSS et PHP dans un thème enfant afin que les mises à jour de thème ne l'effacent pas. Cependant, lorsque je sélectionne mon thème enfant dans Apparence> Thèmes, les principaux paramètres de thème ont tous disparu.

Existe-t-il un moyen de conserver les principaux paramètres du thème?

drake035
la source
que voulez-vous dire par «disparu»? Si vous pouvez revenir au thème parent et que le paramètre est là, ils ne sont pas partis
Mark Kaplun
Sorti du tableau de bord et du site Web, c'est-à-dire. Ils existent toujours quelque part dans la base de données mais ce n'est pas pertinent pour mon problème.
drake035
Alors quel est ton problème? vous avez demandé "Existe-t-il un moyen de conserver les principaux paramètres du thème?" et comme ils sont encore dans la DB, ils sont préservés
Mark Kaplun
"Préservé" signifiant présent dans le thème enfant. Lorsque je passe du thème parent au thème enfant, je souhaite que les paramètres enfant soient identiques aux paramètres parent.
drake035
puis copiez-les. Je dois admettre que je ne comprends toujours pas quel est exactement le problème que vous essayez de résoudre. on dirait que vous essayez de vous compliquer la vie, ou votre approche de faire un thème enfant est mauvaise et vous feriez mieux de modifier le thème parent (ou il se peut que le thème parent ne soit pas adapté pour être utilisé pour les thèmes enfants)
Mark Kaplun

Réponses:

9

En raison de la façon dont ces paramètres de thème sont stockés sous forme de tableau dans la base de données, il peut être difficile de les copier avec simplement copier-coller dans phpmyadmin ou une tactique similaire.

La commande d'option WP CLI est votre amie ici. Si vous n'utilisez pas déjà WP CLI, vérifiez-le! Voici comment j'ai copié les paramètres du thème de vitrine vers un thème appelé vitrine-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
la source
En deuxième ligne, vous devez utiliser une option pipe trop wp update theme_mods_storefront-sqcdy-child --format = json <theme_mods_storefront.txt
Gregor
Oui, je suppose que c'est une façon plus standard de le faire ...
squarecandy
Bonjour squarecandy, vous avez dit "il peut être difficile de les recopier avec un simple copier-coller", mais l'opération que vous effectuez me semble la même. Ai-je tort?
Marco Panichi
@MarcoPanichi - c'est définitivement différent parce que WP CLI fait un tas de trucs fantaisistes que vous ne voyez jamais de désérialisation / re-sérialisation des données de la bonne manière. Si vous copiez simplement les valeurs et essayez de changer les choses directement dans la base de données avec les commandes MySQL ou phpmyadmin, vous gâcherez probablement les choses.
squarecandy
Je suis tout à fait sûr qu'avec vos commandes obtenir [mise à jour] vers [depuis] un fichier, vous faites la même chose
Marco Panichi
6

Les modifications du thème Wordpress sont enregistrées dans la wp_optionstable de base de données dans le theme_mods_{themename}champ. Vous pouvez le copier et renommer en utilisant le nom de votre thème enfant.

andrejm
la source
1
Et lorsque le thème parent est mis à jour et ajoute de nouvelles options, que faites-vous alors?
Mark Kaplun
1
Quelle est la meilleure option @MarkKaplun? Je pense que cela résout le problème posé par l'utilisateur
Eoin
1
@Enfin, plus je lis de questions sur les thèmes enfants, moins j'aime les limites de celui-ci. Il semble que pour tout changement non trivial du thème parent, vous devrez réévaluer le code du thème enfant. Si vous ne faites que du CSS, il n'y a pas de problème, mais pour toute autre chose, une réévaluation est nécessaire. l'OP ici devra s'assurer qu'il synchronise les options avec le thème parent à chaque mise à niveau (au cas où une nouvelle option avec une valeur par défaut non vide a été ajoutée). Je me déconseille d'utiliser des thèmes enfants, et j'utilise plutôt git pour dériver le "parent" et faire des fusions lorsqu'il y a des mises à jour.
Mark Kaplun
Lorsque vous dites, renommer en utilisant le nom du thème enfant, quel nom spécifique voulez-vous dire? Je ne comprends pas où obtenir le nom du thème enfant.
@fuddin le nom du thème est le nom du dossier du thème enfant; par exemple: les paramètres du thème parent sont identifiés par l'option_name 'theme_mods_parent-theme-name'; les paramètres de thème enfant peuvent être identifiés par l'option_name 'theme_mods_parent-theme-name-child'. Vous pouvez effectuer une sélection sur votre base de données afin de voir cela clairement:SELECT * FROM wp_options WHERE option_name LIKE "theme_mods_%"
Marco Panichi
1

J'ai résolu en copiant simplement les options dans la base de données .

Voici la procédure étape par étape :

  1. Connectez-vous à votre phpMyAdmin et sélectionnez la base de données du webiste
  2. Sauvegarder la base de données
  3. Exécutez cette requête afin d'avoir une vision claire de la situation SELECT * FROM wp_options WHERE option_name LIKE "theme_mods_%":; cette instruction renvoie une ligne pour chaque thème que vous avez activé sur votre site Web jusqu'à présent
  4. Modifiez la ligne des paramètres du thème parent, identifiée par option_name = theme_mods_parent-theme-name
  5. Ici, dans le champ option_value, vous avez tous les paramètres du thème parent sous une forme sérialisée; les copier; vous pouvez utiliser un outil de désérialisation afin de voir le contenu sous une forme conviviale
  6. Revenez au point 3, mais modifiez maintenant la ligne des paramètres du thème enfant
  7. Collez les paramètres que vous avez copiés auparavant dans le champ option_value; enregistrer
Marco Panichi
la source
0

Vous pouvez faire quelque chose comme ce que les thèmes enfants Genesis incluent pour enregistrer les paramètres de thème par défaut lors de l'activation et du changement de thème:

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

De toute évidence, vous devrez modifier ce code pour travailler avec la fonctionnalité de vos thèmes.

Brad Dalton
la source