Beibehalten der Themeneinstellungen im untergeordneten Thema

10

Mein Kunde verwendet das Karma-Thema mit vielen Einstellungen in den Themenoptionen. Ich muss meine CSS- und PHP-Ergänzungen in einem untergeordneten Thema behalten, damit Themenaktualisierungen es nicht auslöschen. Wenn ich jedoch mein untergeordnetes Thema unter Darstellung> Themen auswähle, sind alle Hauptthemaeinstellungen weg.

Gibt es eine Möglichkeit, die Hauptthemaeinstellungen beizubehalten?

drake035
quelle
was meinst du mit "weg"? Wenn Sie zum übergeordneten Thema zurückkehren können und die Einstellungen vorhanden sind, sind sie nicht verschwunden
Mark Kaplun
Vom Dashboard und der Website verschwunden. Sie existieren zwar noch irgendwo in der Datenbank, aber das ist für mein Problem nicht relevant.
Drake035
Also, was ist dein Problem? Sie fragten: "Gibt es eine Möglichkeit, die Einstellungen für das Hauptthema beizubehalten?" und da sie noch in der DB sind, bleiben sie erhalten
Mark Kaplun
"Erhalten" bedeutet im Kinderthema vorhanden. Beim Wechsel vom übergeordneten zum untergeordneten Thema möchte ich, dass die untergeordneten Einstellungen mit den übergeordneten Einstellungen übereinstimmen.
Drake035
dann kopiere sie. Ich muss zugeben, dass ich immer noch nicht verstehe, was genau das Problem ist, das Sie zu lösen versuchen. Es hört sich so an, als würden Sie versuchen, Ihr Leben zu verkomplizieren, oder Ihr Ansatz, ein untergeordnetes Thema zu erstellen, ist falsch, und Sie sollten das übergeordnete Thema besser ändern (oder es könnte sein, dass das übergeordnete Thema nicht für untergeordnete Themen geeignet ist)
Mark Kaplun

Antworten:

9

Aufgrund der Art und Weise, wie diese Designeinstellungen als Array in der Datenbank gespeichert werden, kann es schwierig sein, sie mit nur Kopieren und Einfügen in phpmyadmin oder einer ähnlichen Taktik zu kopieren.

Der Optionsbefehl WP CLI ist hier Ihr Freund. Wenn Sie WP CLI noch nicht verwenden, probieren Sie es aus! So habe ich die Einstellungen aus dem Storefront-Thema in ein Thema namens storefront-sqcdy-child kopiert:

# 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
quelle
Als zweite Zeile sollten Sie auch eine Pipe verwenden. Wp-Option update theme_mods_storefront-sqcdy-child --format = json <theme_mods_storefront.txt
Gregor
Ja, ich nehme an, das ist eine Standardmethode ...
Squarecandy
Hallo squarecandy, Sie sagten, "es kann schwierig sein, sie mit nur Kopieren und Einfügen zu kopieren", aber die Operation, die Sie ausführen, scheint mir dieselbe zu sein. Liege ich falsch?
Marco Panichi
@MarcoPanichi - es ist definitiv anders, weil WP CLI eine Menge ausgefallener Dinge macht, bei denen Sie nie sehen, dass Daten auf die richtige Weise unserialisiert / neu serialisiert werden. Wenn Sie nur die Werte kopieren und versuchen, Dinge direkt in der Datenbank mit MySQL-Befehlen oder phpmyadmin zu ändern, werden Sie wahrscheinlich Dinge durcheinander bringen.
Squarecandy
Ich bin mir ziemlich sicher, dass Sie mit Ihren Befehlen, die aus einer Datei [aktualisiert] werden, dasselbe tun
Marco Panichi,
5

Änderungen an Wordpress-Designs werden in der wp_optionsDatenbanktabelle im theme_mods_{themename}Feld gespeichert . Sie können es kopieren und unter Verwendung Ihres untergeordneten Themennamens umbenennen.

andrejm
quelle
1
Und was tun Sie dann, wenn das übergeordnete Thema aktualisiert und neue Optionen hinzugefügt werden?
Mark Kaplun
1
Was ist eine bessere Option @MarkKaplun? Ich denke, dies löst das Problem, das der Benutzer stellt
Eoin
1
@ Je mehr Fragen ich über untergeordnete Themen lese, desto weniger mag ich die Einschränkungen. Es scheint, als müssten Sie für jede nicht triviale Änderung des übergeordneten Themas den Code des untergeordneten Themas neu bewerten. Wenn Sie nur CSS verwenden, gibt es kaum Probleme, aber für alles andere ist eine Neubewertung erforderlich. Das OP hier muss sicherstellen, dass er die Optionen bei jedem Upgrade mit dem übergeordneten Thema synchronisiert (falls eine neue Option mit einem nicht leeren Standardwert hinzugefügt wurde). Ich befürworte die Verwendung von untergeordneten Themen und verwende stattdessen git, um die "Eltern" zu verzweigen und Zusammenführungen vorzunehmen, wenn Aktualisierungen vorliegen.
Mark Kaplun
Wenn Sie sagen, benennen Sie mit dem Namen des untergeordneten Themas um, welchen spezifischen Namen meinen Sie? Ich verstehe nicht, woher ich den Namen des untergeordneten Themas bekomme.
@fuddin Der Themenname ist der Name des Ordners des untergeordneten Themas. Beispiel: Einstellungen für übergeordnete Themen werden durch den Optionsnamen 'theme_mods_parent-theme-name' gekennzeichnet. Einstellungen für untergeordnete Themen können durch den Optionsnamen 'theme_mods_parent-theme-name-child' identifiziert werden. Sie können eine Auswahl in Ihrer Datenbank durchführen, um dies klar anzuzeigen:SELECT * FROM wp_options WHERE option_name LIKE "theme_mods_%"
Marco Panichi
0

Sie können beispielsweise die untergeordneten Genesis-Themen verwenden, um die Standarddesigneinstellungen beim Aktivieren und Wechseln von Themen zu speichern:

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

Natürlich müssten Sie diesen Code ändern, um mit den Funktionen Ihres Themes zu arbeiten.

Brad Dalton
quelle
0

Ich habe es gelöst, indem ich einfach die Optionen in die Datenbank kopiert habe .

Hier ist die schrittweise Anleitung :

  1. Melden Sie sich bei Ihrem phpMyAdmin an und wählen Sie die Datenbank der Website aus
  2. Sichern Sie die Datenbank
  3. Führen Sie diese Abfrage aus, um einen klaren Überblick über die Situation zu erhalten : SELECT * FROM wp_options WHERE option_name LIKE "theme_mods_%"; Diese Anweisung gibt eine Zeile für jedes Thema zurück, das Sie bisher auf Ihrer Website aktiviert haben
  4. Ändern Sie die Zeile der übergeordneten Designeinstellungen, die durch option_name = theme_mods_parent-theme-name gekennzeichnet ist
  5. Hier im Feld option_value haben Sie alle übergeordneten Designeinstellungen in einer serialisierten Form. kopiere sie; Sie können ein unserialisiertes Tool verwenden, um den Inhalt in einer menschenfreundlichen Form anzuzeigen
  6. Kehren Sie zu Punkt 3 zurück, ändern Sie jedoch jetzt die Zeile der untergeordneten Designeinstellungen
  7. Fügen Sie die zuvor kopierten Einstellungen in das Feld option_value ein. sparen
Marco Panichi
quelle