Çocuk temamın, üst öğesi etkinken özelleştirilmiş ayarları yeniden uygulamasını nasıl sağlarım?


17

senaryo

  1. 2015 temasını seçin. Arka plan resmi, başlık resmi, site adı ve kısa açıklama gibi çeşitli ayarları özelleştirin.
  2. Ancak temanın dosyalarının içeriğine dokunmayın.
  3. Kullanım Codex' Çocuk Temalar 2015 tema çıplak asgari çocuk tema oluşturmak için.
  4. Yeni alt temayı etkinleştirin.

Hata?

Bu minimum minimum çocuk temasının etkinleştirildiği site, ana temadan tamamen farklı görünüyor. Arka plan ve başlık resmi kayboldu ve üst 2015 temasında etkin olmayan (varsayılan olarak) tüm kenar çubuğu (veya başlık) widget'ları etkinleştirildi.

2015 teması için yalnızca birkaç özelleştirilmiş ayar ile sitenin orijinal görünümü:

Özelleştirilmiş 2015 temasına sahip SofietjeWonders

Görünüşe göre site, sadece gerekli üstbilgiye sahip olan style.cssve yalnızca Codex'un Çocuk Teması sayfasının önerdiği stilleri sıran 2015 temalı türetilmiş çocuk temasıyla görünüyor function.php.

resim açıklamasını buraya girin

Soru

Alt temayı etkinleştirmek ana temanın özelleştirmelerini ve varsayılanlarını koruyacak şekilde nasıl yapabilirim?

Bu durumda: üstbilgi ve arka plan resimleri ve varsayılan (kenar çubuğu / üstbilgi) widget'larının kaldırılması (devre dışı bırakılması?).


notlar

Zaten ağır olan özelleştirilmiş bir temanın alt temasını oluşturmak yinelenen gibi gelebilir, ancak bu temanın dosyalarını düzenleyerek özelleştirmelerle ilgilidir.

Bu soru Bir alt temayı etkinleştirirken, hangi temel ayarların sıfırlanması gerekir; Özel Menüler vb. tam olarak neye benzediğimi soruyor gibi görünüyor. Ne yazık ki, tek cevap, özelliklerde bir uyumsuzluk hakkında spekülasyon yapıyor, bu benim için geçerli değil ve OP'nin aynı etkiye ilişkin yorumunu almadı.

Ben de baktım

Yanıtlar:


9

@ Webtoure'un cevabına +1 verdim çünkü size doğru yönü veriyor, ancak bazı kontroller olmadığını düşünüyorum.

Her şeyden önce, etkinleştirilen temanın bir alt tema olup olmadığını kontrol etmez ve daha önce etkin olan temanın etkinleştirilen alt temanın ana teması olup olmadığını kontrol etmez.

OP anlayışım gereği bu koşullar gereklidir.

Dahası, dikkate almanız gereken bir konu, zaten varsa, etkinleştirilen alt temanın tema modları ile ne yapılacağıdır.

@Webtoure yanıtında, bazı durumlarda sizi kurtarabilecek bir yedekte saklanırlar, ancak WordPress bunları varsayılan olarak tanımaz ve bu nedenle bazı ek kodların kullanılmasını gerektirir.

Ben sadece bir çocuk teması ilk etkinleştirildiğinde tema değişikliklerini ana temadan devralmak daha iyi olacağını düşünüyorum .

Kısacası, ana moddan tema modlarını devralmak için daha önce kontrol etmek istediğim koşullar şunlardır:

  • önceden etkin olan tema, etkinleştirilmekte olan alt temanın üst öğesi olmalıdır
  • etkinleştirilen alt temanın daha önce hiç etkinleştirilmemesi gerekir

İkinci koşulu sağlamak için özel bir seçenek kullanacağım, çünkü WordPress bu kontrolü yapmak için bir yol sağlamıyor.

Bu kod, neler olup bittiğini açıklamak için lütfen satır içi yorumları okuyun:

add_action( 'switch_theme', function( $new_name, \WP_Theme $new_theme ) {

    // get the previously active theme
    $previous = get_option( 'theme_switched', -1 );

    // get the parent of current theme, will be false if no parent
    $parent = $new_theme->parent() ? $new_theme->get_template() : false;

    // current stylesheet name
    $stylesheet = get_option( 'stylesheet' );

    // has the theme being activated ever been activated before?
    $lastActive = get_option( $stylesheet . '_last_active', false );

    // if previouly active theme is the parent of the the child theme being activated
    // and it has never been activated before..
    if ( ! $lastActive && $parent === $previous ) {

        // update "last_active" option so following code won't run again for this theme
        update_option( $stylesheet . '_last_active', current_time( 'timestamp', 1 ) );

        // get the theme mods of the parent
        $previousMods = get_option( 'theme_mods_' . $parent, array() );

        // inherit current theme mods from parent theme mods
        update_option( 'theme_mods_' . $stylesheet, $previousMods );
    }

}, 10, 2 );

İlgilendiğiniz ilk nokta gerçekten haklı değil: geçerli tema bir alt tema değilse, o get_templatezaman geçerli temanın dir adını döndürür. Önceden etkin tema ile geçerli tema arasındaki ilişkiyi bilmenize gerek yoktur: temanın bir üst öğesi varsa bu ayarları yükler, aksi takdirde yalnızca kendi ayarlarını yükler. Yine de ayarların üzerine yazılan sorunu ele alan ikinci noktanıza katılıyorum.
webtoure

Ayrıca, kullanıcı istenen alt temayı etkinleştirmeden önce yanlışlıkla başka bir temayı etkinleştirirse ne olur? Kod çalışmaz ve ( theme_switched, current_theme) ilişkisi başlamakla ilgisizdir.
webtoure

1
@MarjanVenema Webtoure'a ödül verirseniz çok mutlu olurum .
gmazzap

1
@MarjanVenema gmazzap aslında düşünce süreci için yorumlar sağladı ve ayrıca snippet'ime bir düzeltme önerdi. Sanırım kimse ödülü hak ederse, odur. Ayrıca, tamamen işe yaramaz noktalar için soruları cevaplamıyorum. Seviyorum: insanlarla etkileşim, zorluklar ve genellikle elimden geldiğince yardımcı olmak.
webtoure

1
Lütfen sohbet etmek için genişletilmiş tartışmalar yapın, yorumlar onlar için değildir. :)
Rarst
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.