Torun temaları yapmak mümkün mü?


15

Genesis gibi popüler çerçevelerden birini kullanırsam, torun temaları oluşturmak mümkün mü?

Örnek olarak, Genesis'i tüm sitelerimin omurgası olarak kullanmak istiyorum. Genesis'e çerçeve denir ancak aslında ana bir temadır.

Sonra StudioPress'te satılık Genesis çocuk temalarından birini seçiyorum ve sitelerimin her biri için özelleştirmeye devam etmek istiyorum. Tüm sitelerim için bir torun teması yaratır mıydım ve bu konu hakkında nasıl düşünürdüm?

Yanıtlar:


18

Evet ve hayır.

Üst öğe olarak başka bir alt tema belirten bir alt tema oluşturabilirsiniz ve WordPress bunu kullanmaya çalışır.

ancak

Temel geliştiricilerin bunun istenen bir davranış olmadığını açıkça belirttiklerini ve torun temalarını desteklemek için çaba göstermeyeceklerini belirtmek zorunda kalmayacaksınız.

Örneğin, WP API'leri stil sayfası ile şablon URL'leri / dizinleri arasında bir ayrım yapar; burada stil sayfası her zaman etkin temayı ifade eder ve şablon ana temayı ifade eder, ancak büyükbaba get_template_directory_uriveya büyükanne teması varsa , ebeveyn veya büyükbaba veya büyükanne için referans verir mi? Birçok API çağrısı artık belirsiz ve farklı kişiler, temel kod da dahil olmak üzere farklı davranışlar bekleyebilirler. Ayrıca functions.phpebeveyn veya büyükbaba veya büyükannenin yüklemesi ve doğru sırada yapıldığından emin olmanız gerekir.

Ayrıca çok kötü bir uygulama olarak kabul edilir. Torun temalarına ihtiyacınız varsa, yaklaşımınız yanlış bir dönüş yaptı ve geri dönüp bir şeyleri yeniden değerlendirmeniz gerekiyor.

Torun temalarından kaçınmanızı tavsiye ederim, bu daha fazla soruna yol açacaktır. Bunun yerine daha fazla kanca, çocuk temanızdaki eylemleri ve modülerliği filtreler, çocuk temalarını paylaşılan bileşenleri aynı tutmanıza ve biraz zorlukla dallanmanıza izin vermelidir. Ortak öğeleri bir svn harici / git alt modülüne taşımayı deneyin.

Ayrıca, çocuk temanızı temel aldığınız ve çatalla yapıştırdığınız bir çocuk / geçersiz kılma yerine kopya olarak çalışmak istediğiniz bir ebeveyn olarak kullanmak yerine _s modeli de vardır.


Benim durumumda Genesis ile gidersem, çocuk temasını direkt olarak değiştirmek zorundayım değil mi? Git'e çok aşina değilim, ancak orijinal çocuk temasını sağlam tutmama yardımcı olan bir yaklaşımla ilgilenecektiniz.
urok93

Evet, burada çok fazla seçeneğiniz yok.
Tom J Nowell

Harika bir torun teması oluşturmaya çalışırsanız ne olacağını merak ediyorum.
Chris_O

1
Buna ihtiyacınız varsa yöntemin yanlış bir dönüş yaptığını belirtiyorsunuz. Bunu merak etmemin nedeni WooCommerce Storefront temasını kullanmak gibi bir senaryodan kaynaklanıyor. Çeşitli şeyler için özelleştirilmiş olan Storefront'a çocuk temaları satıyorlar. Çocuk temalarından birini kullanıyorsam, ama sonra çocuk temalarını güncellediklerinde üzerine yazılmayacak şekilde kendi değişikliklerimi yapmak istiyorum ... bunu nasıl yaparım?
Drew Angell

1
Bilmiyorum, bu vitrin temasının nasıl oluşturulduğunun bir sınırlaması, o noktada çocuk temasını çatallamak zorundasınız
Tom J Nowell

3

Aşağıda açıklanan yöntemi tam olarak test etmedim, Normal bir "torun" teması da yoktu, ancak template_include filtresinin işlevselliğini veriyor :

    /*
    Plugin Name: Grandchild Themes
    Plugin URI: http://www.who-cares.com/
    Description: A concept for Grandchild themes Plugin
    Author: See Plugin URI
    Version: 0.0.0.0.1-Alpha
    */

    add_action('wp_head', 'grnd_chld_add_headers', 0);
    add_action('init', 'grnd_chld_add_css');

    // Load template if exists. 
function grandchild_template_include( $template ) {

    if ( file_exists( untrailingslashit( plugin_dir_path( __FILE__ ) ) . '/grnd_chld_templates/' . basename( $template ) ) )
        $template = untrailingslashit( plugin_dir_path( __FILE__ ) ) . '/grnd_chld_templates/' . basename( $template );

    return $template;
}

// This is the actual filter that we want .
add_filter( 'template_include', 'grandchild_template_include', 11 );

    function grnd_chld_add_headers () {
        wp_enqueue_style('my_grandchild_style');
    }

    function grnd_chld_add_css() {
        $stamp = @filemtime(plugin_dir_path(__FILE__).'/style.css'); // easy versioning
        wp_register_style ('my_grandchild_style', plugins_url('style.css', __FILE__).'', array(), $stamp);
    }

    // From here , what you got is like a normal functions.php.

Benzer şekilde, örneğin archive_template gibi daha spesifik filtreleri de deneyebilirsiniz

add_filter ('archive_template', create_function ('', 'return plugin_dir_path(__FILE__)."archive.php";'));

Söylenen ve yapılan her şey, bir şeyler yapmanın en iyi yolu olduğundan emin değilim.

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.