Gözden geçirilmiş Codex yöntemiyle üst ve alt tema stil sayfalarını önleme sorunları


9

Bu yazı, bu iş parçacığı ve bu iş parçacığında ortaya çıkan stil sayfası sıralama yöntemleri ile ilgili son değişikliklerle ilgili karşılaştığım birkaç soruyu gündeme getiriyor .

Karşılaştığım sorunlar, WP 4.0 yüklemesinde özellikle çocuk temasına hazır olan yaygın olarak kullanılan ve bakımlı bir ana tema kullanarak genel bir kullanım senaryosu senaryosunda ortaya çıktı. Alt temamın function.php dosyası yalnızca Codex'ta ayrıntılıwp_enqueue_style olarak açıklanan işlevi içerir .

Aşağıda belirtilen kodun bu temaya özel olmasına rağmen, çoğunun üst temalar tarafından kullanılan geçerli kodlama kurallarını kullandığını lütfen unutmayın. Ayrıca, endişe duyduğum alanlar şu anda vahşi doğada bulunan çok sayıda ana tema üzerinde çoğaltılabilir. Ayrıca, bu ana sorular hangi ana temanın kullanıldığına bakılmaksızın evrensel düzeyde uygulanabilir.

KONU 1: İki sıralı

Önerilen Kurulum:

Ana tema, kancaları kullanarak stilleri ve komut dosyalarını sıralamaktır wp_enqueue_scripts, ilgili bölüm aşağıdaki gibidir:

add_action('wp_enqueue_scripts', 'parent_theme_function_name');
function parent_theme_function_name() {
    wp_register_style( 'avia-style' ,  $child_theme_url."/style.css", array(),  '2', 'all' );
    wp_enqueue_style( 'avia-base');
    if($child_theme_url !=  $template_url) { wp_enqueue_style( 'avia-style'); }
}

Çocuğum teması functions.phpson kodeksi değişiklikleri başına stilleri enqueues:

add_action( 'wp_enqueue_scripts', 'enqueue_parent_theme_style' );
function enqueue_parent_theme_style() {
    wp_enqueue_style( 'dm-parent-style', get_template_directory_uri().'/style.css' );
}

Başvurulan kod tarafından kullanılan aşağıdaki kimliklere dikkat edin:

  • id='dm-parent-style-css' alt temamın stili, alt öğe tema işlevim tarafından sıralandığı şekliyle
  • id='avia-style-css' ana tema işlevinde olduğu gibi alt temamın stil sayfası
  • id='dm-child-style-css' çocuğumun tema işlevi tarafından sıralandığı şekliyle alt temamın stil sayfasıdır

Sonuçlar:

İlk bakışta, her şey iyiydi, <head> şu sırayı gösteriyor:

<link rel='stylesheet' id='dm-parent-style-css' href='testinstall.dev/wp-content/themes/enfold/style.css?ver=4.0' type='text/css' media='all' />
<!-- Multiple individual parent theme styles here -->
<link rel='stylesheet' id='avia-style-css' href='testinstall.dev/wp-content/themes/child-theme/style.css?ver=2' type='text/css' media='all' />

Bir eklenti yükledikten sonra, enqueue sırası şu şekilde değişti:

<link rel='stylesheet' id='dm-parent-style-css' href='testinstall.dev/wp-content/themes/enfold/style.css?ver=4.0' type='text/css' media='all' />
<!-- Multiple individual parent theme styles here -->
<link rel='stylesheet' id='avia-style-css' href='testinstall.dev/wp-content/themes/child-theme/style.css?ver=2' type='text/css' media='all' />
<!-- Pesky plugin styles -->

Nihayetinde, herhangi bir eklenti sonra yüklemek için benim çocuk tema css gerekir, bu yüzden benim çocuk tema fonksiyonuna bir öncelik numarası eklemek zorunda kaldı (öncelik numarası ile ilgili önceki tartışma bakınız) .

Ancak işlevim yalnızca ana temanın css'sini enqueque ettiğinden, sonuç artık ana tema css sonuna taşındı ve alt temamın css'sini öncekinden daha da kötü bir tahminde bıraktı.

<!-- Multiple individual parent theme styles here -->
<link rel='stylesheet' id='avia-style-css' href='testinstall.dev/wp-content/themes/child-theme/style.css?ver=2' type='text/css' media='all' />
<!-- Pesky plugin styles -->
<link rel='stylesheet' id='dm-parent-style-css' href='testinstall.dev/wp-content/themes/enfold/style.css?ver=4.0' type='text/css' media='all' />

Şimdi, çocuk teması stilini enqueueing'e başvurmak zorundayım, çizginin ön kısmına geri taşınmasını sağlamak için, iki tema (yeni terim? Lol) alt tema css sorununa neden oluyor .

Onaylanmayan Kurulum:

Çocuk temasında gözden geçirilmiş işlev:

add_action( 'wp_enqueue_scripts', 'enqueue_parent_theme_style', 99 );
function enqueue_parent_theme_style() {
    wp_enqueue_style( 'dm-parent-style', get_template_directory_uri().'/style.css' );
    wp_enqueue_style( 'dm-child-style', get_stylesheet_directory_uri().'/style.css' );
}

Sonuçlar:

Aşağıdaki siparişin üretilmesi <head>:

<!-- Multiple individual parent theme styles here -->
<link rel='stylesheet' id='avia-style-css' href='testinstall.dev/wp-content/themes/child-theme/style.css?ver=2' type='text/css' media='all' />
<!-- Pesky plugin styles -->
<link rel='stylesheet' id='dm-parent-style-css' href='testinstall.dev/wp-content/themes/enfold/style.css?ver=4.0' type='text/css' media='all' />
<link rel='stylesheet' id='dm-child-style-css' href='testinstall.dev/wp-content/themes/child-theme/style.css?ver=2' type='text/css' media='all' />

Alt stil sayfasını işlevime dahil etmek iki kez enqueque olmasına rağmen , ana temanın çocuk stil sayfamızı bizim için doğru şekilde sıralayacağı varsayımı altında kodlamaya göre tercih edilen IMHO . Kimliği her bir stile atanan kimliğe bağlı olarak, ana temanın WP Çekirdeğindeki hiçbir şeyi değil, onu enquequeladığı görülüyor.

Shivm'im:

Bunun tavsiye edilen araçlar olmasını pek tavsiye etmememe rağmen (ve eminim ki bu çözümde kendimden daha fazla kodlama deneyimine sahip geliştiriciler), kendi temsimin hemen üstünde ana temanın kimliğini (çocuk temamın stilini enqueue etmek için kullanılır) kandırdım gösterildiği gibi alt temamın işlevler dosyasında:

add_action( 'wp_enqueue_scripts', 'enqueue_parent_theme_style', 99 );
function enqueue_parent_theme_style() {
    wp_enqueue_style( 'dm-parent-style', get_template_directory_uri().'/style.css' );
    wp_dequeue_style( 'avia-style' );
    wp_enqueue_style( 'dm-child-style', get_stylesheet_directory_uri().'/style.css' );
}

Sonuçlar:

Bu, eldeki sorunları çözdü ve sonuç olarak:

<!-- Multiple individual parent theme styles here -->
<!-- Plugin styles -->
<link rel='stylesheet' id='dm-parent-style-css' href='testinstall.dev/wp-content/themes/enfold/style.css?ver=4.0' type='text/css' media='all' />
<link rel='stylesheet' id='dm-child-style-css' href='testinstall.dev/wp-content/themes/child-theme/style.css?ver=2' type='text/css' media='all' />

Tabii ki, bu ana tema tarafından kullanılan kimliği bilmeyi gerektiriyordu - standart alt tema geliştirme metodolojisi olarak daha genel bir şeye ihtiyaç duyulacaktı.

SORUN 2: Taşınan alt stil sayfaları

(Bunun başka bir iş parçacığında ortaya çıkmadığına inanmak zor görünüyor, ancak bakarken belirli bir tane görmedim ... kaçırdıysam, dikkatimi çekmekten çekinmeyin.)

Ben asla varsayılan kullanmak style.cssbelli ki orada olmak zorunda, ama bütün gerçek stilleri a / css / dizininde bir .css minified dosya olarak SCSS derlenmektedir - benim tema stilleri için çocuk tema kök dizininde. Bunun, çocuk teması gelişimi için evrensel düzeyde "beklenen norm" olmadığını fark etsem de , bildiğim en ciddi WordPress geliştiricileri benzer bir şey yapıyor. Bu, elbette, ana temanın enqueque olup olmadığına bakılmaksızın , bu stil sayfasını işlevimde el ile sıkmayı gerektirir .

Hepsini özetlemek gerekirse ...

  1. Ana temaların alt tema stilleri açısından alt tema temasını gerektiği gibi içermesi varsayımı güvenli midir?
  2. Önceliği kaldırmak, alt tema stilleri bir eklenti tarafından üzerine yazılmaya başladığında WordPress topluluğunun bir kısmı için daha fazla karışıklık yaratabilir. Temaların stillerin üzerine yazmasını bekliyoruz, ancak eklentilerle çok fazla değil.
  3. Gerçek alt tema stilleri için özel bir stil sayfası kullanırken (bunları önceden tanımlanmış olması gerektiği gibi style.css), bu dosyayı manuel olarak sıralamak gerekli hale gelir. Geniş bir geliştirici yelpazesinde sürekliliği sağlamak açısından, olası yinelemeden bağımsız olarak alt stil sayfasını manuel olarak sıralamayı teşvik etmek mantıklı olmaz mı?

Eminim child-parent-theme ilişkisinin nasıl yapılandırılacağı konusunda bir tartışma vardır. Ana tema hakkında herhangi bir şey varsaymanın güvenli olduğunu sanmıyorum. Şahsen alt temaya el ile stil yüklemeyi tercih ederim. Ancak, bunlar çocuk temasının doğası hakkında vermeniz ve bunu açıkça bildirmeniz gereken kararlardır. Alt temalar yalnızca basit görsel ayarlamalar içinse, çocuğun stil sayfasını yükleyen üst öğe muhtemelen iyidir. Ancak ana tema bir çerçeve ise, stil sayfalarını yükleyen alt temaya doğru giderdim.
Seamus Leahy

Yanıtlar:


5

SORU 1

Ana temaların alt tema stilleri açısından alt tema temasını gerektiği gibi içermesi varsayımı güvenli midir?

Genel kural, evet. Ama , sen gerektiğini varsayalım asla . Canlı felaketlerin ve başarısızlıkların çoğu, bir varsayımı temel alan varsayımlardan veya gerçeklerden kaynaklanmaktadır

VARSAYILAN GERÇEKLER

  • Önce bir alt temanın function.php, sonra üst öğenin function.php yüklenir. Bu, üst temanın ana stil sayfasının, kod temasındaki güncellenmiş koddan alt temanın ana stil sayfasından önce yüklenmesini sağlar

  • Birlikte verilen temaya bakalım, twentytwelve. Sihir burada olur wp_enqueue_style( 'twentytwelve-style', get_stylesheet_uri() );. Ana stil sayfası bu şekilde sıralanır. Tema bir ana tema olarak etkin olduğunda, style.css üst temadan get_stylesheet_uri()üst yöneticinin style.css'ini işaret edecek şekilde yüklenir .

  • Bir alt temaya geçtiğinizde get_stylesheet_uri(), yolunu alt temanın style.css'ini gösterecek şekilde "değiştirir"; yani artık wp_enqueue_style( 'twentytwelve-style', get_stylesheet_uri() );üst style.css yerine bunun yerine alt style.css yükler

  • Üst temadaki diğer tüm stiller, yazıldıkları sıraya göre normal şekilde yüklenir

Çukurlara

  • Doğrudan başlık şablonunuza eklenen satır içi stiller ve stil sayfaları. Bu konuda bazı testler yaptım. Üst stil sayfası wp_enqueue_scriptsüstbilgi kullanılarak sıralanmaz ve doğrudan üstbilgiye yüklenmezse, önce alt temanın ana stil sayfası yüklenir. Burada geçici bir çözüm olarak, daha önce üst öğenin header.php dosyasını alt temaya kopyalayıp bu çağrıları kaldırmayı önermiştim. Daha sonra OP amortisman fonksiyonunda belirtildiği gibi hem üst hem de alt tema stillerini ve doğrudan header.php dosyasına yüklenen diğer stil sayfalarını sıralamanız gerekir.

  • Ben stilleri (ve komut dosyaları) doğrudan başlıkta yüklendiği bir veya iki kez bu rastladım ve bu nedenle çağrı wp_headatlandı. Bu, aksiyonun sessizce başarısız olmasına neden olacak, böylece stilleriniz basitçe görünmeyecek.

  • Yanlış öncelikler ayarlandı. Enqueueu işlevlerinizi bağladığınızda önceliklerin ebeveyn ve alt eylemler olarak ayarlanması gerekmez. Her ikisi de aynı varsayılan önceliğe sahip olduğunda, ilk gelen, ilk sunulan kural geçerlidir. Bu yükleme siparişinin doğru olmasını sağlayacaktır

EBEVEYN TEMASI YAZARLARINA NOT

Bir temaya stil ve komut dosyası eklemek için uygun kabul edilen yöntem, wp_enqueue_scriptsişlem kancasıdır. Asla doğrudan başlık şablonuna stil ve komut dosyası eklemeyin ve işlevinizi takarken eyleminizde herhangi bir öncelik ayarlamayın

Ana stil sayfasını her zaman aşağıdaki gibi de yükleyin:

wp_enqueue_style( 'twentytwelve-style', get_stylesheet_uri() );

Bu, bir çocuk teması kullanılırken çocuğun ana stil sayfasının yüklenmesini sağlar

ÇOCUK TEMA YAZARI OLARAK SORUMLULUĞUNUZ

  • Acele etmeyin ve ana temayı kullanın. Ana temanızı bilin, tema yapıları ve temadaki işlevlerin ve kancaların nasıl kullanıldığından emin olun. Üst temanın nasıl çalıştığı hakkında içeriden bilgi sahibi değilseniz, başarılı bir alt tema oluşturamazsınız. Kodunuzun beklendiği gibi çalışması için stiller ve komut dosyalarının düzgün bir şekilde yüklendiğinden emin olmak sizin sorumluluğunuzdadır.

  • Ana tema yazarını her zaman memnun olmadığınız herhangi bir kod hakkında uyarın. Örneğin, yazar stillerini doğrudan başlığa eklediyse, bunu uyarın ve bunun bunu yapmanın yanlış yolu olduğunu fark etmesini sağlayın ve gelecekteki bir sürümde bunu düzeltmesini isteyin.

SORU 2

Önceliği kaldırmak, alt tema stilleri bir eklenti tarafından üzerine yazılmaya başladığında WordPress topluluğunun bir kısmı için daha fazla karışıklık yaratabilir. Temaların stillerin üzerine yazmasını bekliyoruz, ancak eklentilerle çok fazla değil

Ne yazık ki, buna karşı güvende olmak için doğrudan bir yöntem yoktur. Burada asıl nokta, eklenti stilleri, son kullanıcının rızası olmadan asla varsayılan tema stillerinin üzerine yazılmamalıdır. Benim düşünceme göre, bu sadece kötü uygulama veya eklenti yazarından gelen ihmal. Böyle bir durumda, eklenti yazarıyla iletişime geçip onu bu konuda uyarmasını öneririm

Ayrıca, her zaman ihtiyacınız olmayan veya yukarıdaki kodunuzda olduğu gibi bunları yeniden düzenleyip yeniden kaydettirmeniz gereken bir stili (ve komut dosyasını) dequeue ve uneregister etme seçeneğiniz de vardır (mükemmel bir şekilde iyidir). Shivm'inize sadece bir not, bir stili ve senaryoyu ayıklamak ve kaydını silmek en iyi uygulamadır .

SORU 3

Gerçek alt tema stilleri için özel bir stil sayfası kullanırken (bunları önceden tanımlanmış style.css dosyasına yerleştirilmesi gerektiği gibi), bu dosyayı manuel olarak sıralamak gerekli hale gelir. Geniş bir geliştirici yelpazesinde sürekliliği sağlamak açısından, olası yinelemeden bağımsız olarak alt stil sayfasını manuel olarak sıralamayı teşvik etmek mantıklı olmaz mı?

Bu sorunun doğrudan siyah beyaz bir cevabı olduğunu düşünmüyorum. Eylemi yöneten belirli bir kılavuzda olduğu sürece rahat ettiğiniz şeyi yaparak söyleyerek cevap verirdim.

Stil sayfaları işlevsellik eklemek için mevcut değildir, ancak kullanıcıya görsel deneyim eklemek için oradadır. Stiller de işlendiği gibi doğrudan tarayıcıya olduğu gibi gönderilir. Wordpress burada bir rol oynamıyor.

Bu gerçeğe dayanarak, bir stil sayfasını iki kez yüklerken tehdit edici kırmızı bayraklar görmüyorum. Bu performansta birkaç milisaniyeye mal olabilir. Dürüst olmak gerekirse, bunun dışında, kopyaların farklı tarayıcılarda nasıl ele alındığından emin değilim. Bu, okuyucu olarak gidip test edebileceğiniz bir şeydir

IMHO, kopyalar asla iyi değildir ve daima kaçınılmalıdır. Çocuğun ana stil sayfasını herhangi bir nedenden dolayı gerçekten el ile sıkmak istiyorsanız, kodunuzu shivm'inizde kullanmanız gerektiğini öneririm . Varsayılan olarak eklenen kopyayı ayırın ve kaydını silin ve ardından stil sayfasını normal şekilde yeniden sıralayın.

Hatırlanması gereken tek şey, enqueue ve register işlevlerinin de kullanabileceğiniz bir $dependancyparametresi vardır. Bu nedenle, ikincil bir stil sayfası yüklemek ve bunu alt temanızın ana stil sayfasına bağlı yapmak kolaydır

SONUÇ OLARAK

Kodeksin son güncellemesinden bu yana, geri bildirim şaşırtıcıydı ve herkesin bu konudaki geri bildirimlerine teşekkür etmek istiyorum. Herkesi özellikle bu soruya her türlü geri bildirime katılmaya teşvik etmek istiyorum. Eklemek veya yorum yapmak istediğiniz bir şey varsa, lütfen yapın.


Pieter, cevabın için teşekkürler. Bugün bataklık yaptım ama söylediklerinize dayanan bazı düşüncelerim var, bu akşamı daha sonra eklemeyi umuyorum.
dMcClintock

Lütfen yap. Bu konuda başka düşünceler duymak istiyorum. Cevabım benim testime dayalı düşüncem, bu yüzden bu kesinlikle alfa ve omega değil. Fikrinizi dört gözle bekliyoruz :-)
Pieter Goosen
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.