Alt temada tema ayarlarını koruma


10

Müvekkilim Karma temasını tema seçeneklerinde birçok ayarla kullanıyor. Tema güncellemelerini silmemesi için CSS ve PHP eklemelerimi bir çocuk temasında tutmam gerekiyor. Ancak Görünüm> Temalar altında alt temamı seçtiğimde, ana tema ayarlarının hepsi gitti.

Ana tema ayarlarını korumanın bir yolu var mı?


"gitti" derken ne demek istiyorsun? Ana temaya geri dönebilir ve ayar oradaysa, o zaman
gitmezler

Gösterge tablosundan ve web sitesinden gitti. Yine de veritabanında bir yerde varlar ama bu benim sorunumla ilgili değil.
drake035

peki problemin ne "Ana tema ayarlarını korumanın bir yolu var mı?" ve hala
DB'de

"Korunmuş" anlamı çocuk temasında mevcuttur. Üst öğeden alt temaya geçerken alt ayarların üst ayarlarla aynı olmasını istiyorum.
drake035

sonra kopyalayın. İtiraf etmeliyim ki hala çözmeye çalıştığın sorunun tam olarak ne olduğunu anlamıyorum. hayatınızı zorlaştırmaya çalıştığınız gibi görünüyor veya bir çocuk teması yapma yaklaşımınız yanlış ve üst temayı daha iyi değiştirirsiniz (veya ana temanın alt temalar için kullanılmaya uygun olmaması olabilir)
Mark Kaplun

Yanıtlar:


11

Bu tema ayarlarının veritabanında bir dizi olarak depolanma biçimi nedeniyle, phpmyadmin veya benzer bir taktikte kopyalayıp yapıştırmakla bunları kopyalamak zor olabilir.

WP CLI seçeneği komut burada arkadaşıdır. WP CLI'yi henüz kullanmıyorsanız, kontrol edin! Ayarları storefront temasından storefront-sqcdy-child adlı bir temaya şu şekilde kopyaladım:

# 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

İkinci satır olarak bir pipe wp seçenek güncellemesi kullanmalısınız theme_mods_storefront-sqcdy-child --format = json <theme_mods_storefront.txt
Gregor

Evet, sanırım bunu yapmanın daha standart bir yolu ...
squarecandy

Merhaba squarecandy, "Sadece kopyala ve yapıştır ile kopyalamak zor olabilir" dedin, ancak gerçekleştirdiğin işlem bana aynı görünüyor. Yanlış mıyım?
Marco Panichi

@MarcoPanichi - kesinlikle farklı çünkü WP CLI, verileri seri şekilde / yeniden serileştirmeyi asla doğru şekilde görmediğiniz bir sürü süslü şey yapıyor. Sadece değerleri kopyalayıp MySQL komutları veya phpmyadmin ile doğrudan veritabanında bir şeyleri değiştirmeyi denerseniz, muhtemelen işleri karıştırırsınız.
squarecandy

1
Bkz wpengine.com/support/wordpress-serialized-data - Az önce tefrika değer üzerinden kopyalama ve zaman% 100 işe bekleyemezsiniz neden için "Potansiyel Çatışmalar" bölümü. WP CLI tüm bunları sizin için halleder.
squarecandy

6

Wordpress tema değişiklikleri alandaki wp_optionsveritabanı tablosuna kaydedilir theme_mods_{themename}. Alt tema adınızı kullanarak kopyalayabilir ve yeniden adlandırabilirsiniz.


1
Üst tema güncellendiğinde ve yeni seçenekler eklediğinde, o zaman ne yaparsınız?
Mark Kaplun

1
@MarkKaplun daha iyi bir seçenek nedir? Bu kullanıcının soran sorunu çözdüğünü düşünüyorum
Eoin

1
Çocuk temaları hakkında okuduğum soruların sayısı arttıkça, bunun sınırlamalarını o kadar az seviyorum. Üst temadaki önemsiz herhangi bir değişiklik için alt tema kodunu yeniden değerlendirmeniz gerekecek gibi görünüyor. Tek yaptığınız CSS ise, çok az sorun var, ancak başka bir şey için yeniden değerlendirme gerekiyor. buradaki OP'nin, her yükseltmede seçenekleri ana temayla senkronize ettiğinden emin olması gerekir (boş olmayan varsayılan değere sahip yeni bir seçenek eklendiğinde). Kendimi alt temaları kullanmaya karşı savunucu buluyorum ve bunun yerine git'i "ebeveyn" in dalını kullanmak ve güncellemeler olduğunda birleştirmeler yapmak için kullanıyorum.
Mark Kaplun

Alt temanın adını kullanarak yeniden adlandırın, ne demek istiyorsun? Alt tema adını nereden alacağımı anlamıyorum.

@fuddin tema adı alt temanın klasörünün adıdır; örneğin: ana tema ayarları, 'theme_mods_parent-theme-name' seçenek_adı ile tanımlanır; alt tema ayarları option_name 'theme_mods_parent-theme-name-child' ile tanımlanabilir. Bunu açıkça görmek için veritabanınızda bir seçim yapabilirsiniz:SELECT * FROM wp_options WHERE option_name LIKE "theme_mods_%"
Marco Panichi

1

Sadece veritabanındaki seçenekleri kopyalayarak çözdüm .

İşte adım adım prosedür :

  1. PhpMyAdmin'inize giriş yapın ve webiste ait veritabanını seçin
  2. Veritabanını yedekleyin
  3. Durumun net bir görünümünü elde etmek için bu sorguyu yürütün SELECT * FROM wp_options WHERE option_name LIKE "theme_mods_%":; bu talimat, şimdiye kadar web sitenizde etkinleştirdiğiniz her tema için bir satır döndürecektir
  4. Ana tema ayarlarının satırını option_name = theme_mods_parent-theme-name ile tanımlanan şekilde değiştirin
  5. Burada, option_value alanında, üst tema ayarlarının tümü serileştirilmiş bir formdadır; kopyalayın; içeriği insan dostu bir formda görmek için bir serileştirme aracını kullanabilirsiniz
  6. 3. noktaya geri dönün, ancak şimdi alt tema ayarlarının satırını değiştirin
  7. Daha önce kopyaladığınız ayarları option_value alanına yapıştırın; kayıt etmek

0

Temaları etkinleştirirken ve değiştirirken varsayılan tema ayarlarını kaydetmek için Genesis alt temalarının içerdiği gibi bir şey yapabilirsiniz:

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

Açıkça, tema işlevselliğinizle çalışmak için bu kodu değiştirmeniz gerekir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.