Mempertahankan pengaturan tema dalam tema anak

10

Klien saya menggunakan tema Karma dengan banyak pengaturan dalam opsi tema. Saya perlu menyimpan tambahan CSS dan PHP saya di tema anak sehingga pembaruan tema tidak menghapusnya. Namun ketika saya memilih tema anak saya di Appearance> Themes, semua pengaturan tema utama hilang.

Apakah ada cara untuk mempertahankan pengaturan tema utama?

drake035
sumber
apa maksudmu dengan "pergi"? Jika Anda dapat beralih kembali ke tema induk dan pengaturannya ada di sana maka itu tidak akan hilang
Mark Kaplun
Hilang dari dashboard dan situs web, yaitu. Mereka masih ada di suatu tempat di basis data, tetapi itu tidak relevan dengan masalah saya.
drake035
jadi apa masalahmu? Anda bertanya "Apakah ada cara untuk mempertahankan pengaturan tema utama?" dan karena mereka masih dalam DB, mereka dilestarikan
Mark Kaplun
"Preserved" artinya hadir dalam tema anak. Saat beralih dari tema induk ke anak, saya ingin pengaturan anak sama dengan pengaturan induk.
drake035
kemudian salin. Harus mengakui saya masih belum mendapatkan apa sebenarnya masalah yang Anda coba selesaikan. terdengar seperti Anda mencoba untuk mempersulit hidup Anda, atau pendekatan Anda dalam melakukan tema anak salah dan Anda lebih baik memodifikasi tema induk (atau mungkin bahwa tema induk tidak cocok untuk digunakan untuk tema anak)
Mark Kaplun

Jawaban:

9

Karena cara pengaturan tema ini disimpan sebagai array dalam database, mungkin sulit untuk menyalinnya dengan hanya menyalin dan menempelkannya di phpmyadmin atau taktik serupa.

The WP CLI pilihan perintah adalah teman Anda di sini. Jika Anda belum menggunakan WP CLI, lihatlah! Inilah cara saya menyalin pengaturan dari tema etalase ke tema yang disebut etalase-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
sumber
Sebagai baris kedua Anda harus menggunakan opsi pembaruan pipa terlalu wp theme_mods_storefront-sqcdy-child --format = json <theme_mods_storefront.txt
Gregor
Ya, saya kira itu cara yang lebih standar untuk melakukannya ...
squarecandy
Halo squarecandy, Anda berkata "mungkin sulit untuk menyalinnya hanya dengan salin dan tempel", tetapi operasi yang Anda lakukan tampaknya sama dengan saya. Apakah aku salah?
Marco Panichi
@ MarscoPanichi - jelas berbeda karena WP CLI melakukan banyak hal mewah yang Anda tidak pernah melihat unserializing / re-serialisasi data dengan cara yang benar. Jika Anda hanya menyalin nilai-nilai dan mencoba mengubah hal-hal secara langsung dalam database dengan perintah MySQL atau phpmyadmin Anda mungkin akan mengacaukan semuanya.
squarecandy
Saya cukup yakin bahwa dengan perintah Anda mendapatkan [pembaruan] ke [dari] file, Anda melakukan hal yang sama
Marco Panichi
6

Modifikasi tema Wordpress disimpan dalam wp_optionstabel database di theme_mods_{themename}lapangan. Anda dapat menyalinnya dan mengganti nama menggunakan nama tema anak Anda.

andrejm
sumber
1
Dan ketika tema induk memperbarui dan menambahkan opsi baru, apa yang Anda lakukan?
Mark Kaplun
1
Apa pilihan yang lebih baik dari @MarkKaplun? Saya pikir ini memecahkan masalah yang ditanyakan pengguna
Eoin
1
@ Gabungkan semakin banyak pertanyaan yang saya baca tentang tema anak, semakin sedikit saya menyukai keterbatasannya. Sepertinya untuk setiap perubahan yang tidak sepele dalam tema induk Anda harus mengevaluasi kembali kode tema anak. Jika semua yang Anda lakukan adalah CSS, ada sedikit masalah, tetapi untuk hal lain diperlukan evaluasi ulang. OP di sini perlu memastikan dia menyinkronkan opsi dengan tema induk pada setiap pemutakhiran (jika ada opsi baru dengan nilai default yang tidak kosong ditambahkan). Saya menemukan diri saya menganjurkan untuk tidak menggunakan tema anak, dan sebagai gantinya menggunakan git untuk menabur "induk" dan membuat penggabungan ketika ada pembaruan.
Mark Kaplun
Ketika Anda mengatakan, ganti nama menggunakan nama tema anak, nama spesifik apa yang Anda maksud? Saya tidak mengerti dari mana mendapatkan nama tema anak itu.
@fuddin nama tema adalah nama folder tema anak; misalnya: pengaturan tema induk diidentifikasi oleh option_name 'theme_mods_parent-theme-name'; pengaturan tema anak dapat diidentifikasi oleh option_name 'theme_mods_parent-theme-name-child'. Anda dapat melakukan pilih pada database Anda untuk melihatnya dengan jelas:SELECT * FROM wp_options WHERE option_name LIKE "theme_mods_%"
Marco Panichi
1

Saya dipecahkan dengan hanya menyalin opsi dalam database .

Berikut adalah prosedur langkah demi langkah :

  1. Masuk ke phpMyAdmin Anda dan pilih database webiste
  2. Cadangkan basis data
  3. Jalankan permintaan ini untuk memiliki pandangan yang jelas tentang situasi SELECT * FROM wp_options WHERE option_name LIKE "theme_mods_%":; instruksi ini akan mengembalikan satu baris untuk setiap tema yang telah Anda aktifkan di situs web Anda sejauh ini
  4. Ubah baris pengaturan tema induk, diidentifikasi oleh option_name = theme_mods_parent-theme-name
  5. Di sini, di bidang option_value, Anda memiliki semua pengaturan tema induk dalam bentuk serial; menyalinnya; Anda dapat menggunakan alat unserialize untuk melihat konten dalam bentuk yang ramah manusia
  6. Kembali ke poin 3, tetapi sekarang ubah baris pengaturan tema anak
  7. Rekatkan pengaturan yang telah Anda salin sebelumnya di bidang option_value; menyimpan
Marco Panichi
sumber
0

Anda dapat melakukan sesuatu seperti apa yang termasuk tema anak-anak Genesis untuk menyimpan pengaturan tema default saat mengaktifkan dan mengganti tema:

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

Jelas Anda perlu memodifikasi kode ini agar berfungsi dengan fungsionalitas tema Anda.

Brad Dalton
sumber