Her ana stil sayfasından / ifadesinden sonra Çocuk stil sayfamı / slarını nasıl sıralarım?


11

Chip Bennett tarafından iyi yazılmış Oenology temasını kendi Çocuk temamın Ebeveyni olarak kullanıyorum.

Gelişim sürecimde, stilleri kontrol etmek söz konusu olduğunda Çocuk temaları yazan insanlar için bazı zorluklar olduğunu keşfettim.

Sadece ana style.css dosyamın <head> içindeki her stil sayfası bağlantısı veya ifadesinden önce yükleneceğini keşfettim ve bu neden bazı Üst stilleri geçersiz kılma konusunda sorun yaşadığımı açıklıyor.

problemin daha fazla araştırılması, çeşitli Ebeveyn stil sayfalarının ve stillerinin <head> 'de üç yerde sıralanabileceğini göstermektedir; add_action('wp_print_styles',,, add_action('wp_enqueue_scripts',ve sonra add_action('wp_head',.

basitleştirmek için iki stil sayfası oluşturmayı planlıyorum. ilk ana 'style.css' sayfası yalnızca @import url()Oenology'nin ana stil sayfasını yüklemek için gereken komutu içerir .

ikinci stil sayfası Çocuk kurallarını içerecektir. diğer tüm kurallardan sonra yüklendiğinden emin olmak için , bunu kullanarak sıraya girerim add_action( 'wp_head',.

kulağa makul geliyor mu? ya da bunu yapmanın daha iyi (daha doğru) bir yolu var mı?

btw, '/parent-theme/style.css' nin ne anlama geldiğini bilen var mı? MRPreviewRefresh = 723 '?

Güncelleme

wp_enqueue_style (), wp_head () içinde çalışmıyor gibi görünüyor.

alkış,
Gregory

Yanıtlar:


21

Sadece FYI, bu soru muhtemelen Oenoloji Temasına özel olduğu için çok lokalize sınırlar .

Bununla birlikte, burada bir sorun yaşadığınızı düşünüyorum : Oenology iki stil sayfasını sıralıyor:

  1. style.css, doğrudan belge başlığında (bu nedenle daha önce wp_head() işten çıkarılır)
  2. {varietal}.css, at wp_enqueue_scripts, öncelikli 11olarak functions/dynamic-css.php:

    /**
     * Enqueue Varietal Stylesheet
     */
    function oenology_enqueue_varietal_style() {
    
    // define varietal stylesheet
    global $oenology_options;
    $oenology_options = oenology_get_options();
    $varietal_handle = 'oenology_' . $oenology_options['varietal'] . '_stylesheet';
    $varietal_stylesheet = get_template_directory_uri() . '/varietals/' . $oenology_options['varietal'] . '.css';
    
    wp_enqueue_style( $varietal_handle, $varietal_stylesheet );
    }
    // Enqueue Varietal Stylesheet at wp_print_styles
    add_action('wp_enqueue_scripts', 'oenology_enqueue_varietal_style', 11 );

Doğru ciltlemeye 11neden olmak için temel stil sayfasının öncestyle.css yüklenmesini ve değişken stil sayfasının ikinci olarak yüklenmesini sağlamak için "dış görünüm" uygulayan değişken stil sayfası önceliklidir .

Dolayısıyla, değişken stil sayfasını geçersiz kılmanız gerekiyorsa, ikinci stil sayfanızı değişken stil sayfasından sonra sıralamanız yeterlidir ; yani en az 12veya daha büyük bir önceliğe sahiptir .

Düzenle

Daha genel bir soruya daha genel bir cevap vermek için:

Bir Ana Tema stil sayfası sırasını geçersiz kılmak için iki şeyi bilmeniz gerekir:

  1. Eylem kanca stil kuyruğa edildiği
  2. Geri aramanın kancaya eklenmesi önceliği

Enqueue işlevleri ( wp_enqueue_script()/ wp_enqueue_style()) , kanca ve / kancalar arasında herhangi bir yerde düzgün bir şekilde yürütülebilir . ( İşlevleri yürütmek için semantik olarak doğru kanca şu anda .) Bu liste aşağıdaki eylemleri içerir (diğerleri arasında; bunlar sadece olağan şüphelilerdir):initwp_print_scriptswp_print_styleswp_enqueue_*()wp_enqueue_scripts

  • init
  • wp_head
  • wp_enqueue_scripts
  • wp_print_scripts/wp_print_styles

(Not olduğunu wp_enqueue_scripts, wp_print_stylesve wp_print_scripts tüm yangın içeride ait wp_headspesifik bir öncelik, .

Bu nedenle, bir Üst Tema stil sayfasını geçersiz kılmak için aşağıdakilerden birini yapmanız gerekir:

  • De-enqueue aracılığıyla, Veli-Tema stilwp_dequeue_style( $handle )
  • Stili dolduran Ana Tema geri aramasını,remove_action( $hook, $callback )
  • Çocuk Teması stil sayfası wp_enqueue_style()çağrınızı daha düşük bir öncelikle aynı kancaya veya daha sonraki bir kancaya bağlayarak Üst Tema stil sayfasını geçersiz kılmak için CSS basamaklamasını kullanın .

    Bu son seçenek için Ana Tema aşağıdakileri kullanıyorsa:

    `add_action( 'wp_enqueue_scripts', 'parent_theme_enqueue_style', $priority )`

    ... o zaman Çocuk Teması şunları kullanır:

    `add_action( 'wp_enqueue_scripts', 'child_theme_enqueue_style', {$priority + 1} )`

teşekkür ederim Chip. Gerçekten wp_enqueue_scripts ve son yükleme için benim çocuk stil sayfası almak için yüksek bir ordinal kullanabilirsiniz. Ancak Alt stil sayfamın ifadesinden sonra hala 3 farklı stil ifadesi var. Bunlardan 2 tanesi WP'nin kendisi tarafından verilir !!!, 1 tanesi Wp'nin add_custom_image_header () fonksiyonu ile Oenology tarafından üretilir.
Gregory

body.custom-background stil deyimi WP'nin kendisi tarafından verilir, ancak 'BACKGROUND_COLOR' tanımlayarak özel bir arka plan rengi belirtebildiğim anlaşılıyor. garip bir css kuralının özel bir WP sabiti üzerinden ayarlanması gerektiği garip.
Gregory

1
son yorum Chip. bu soru çok yerel değil . birçok tema, stilleri sıralamak veya yazdırmak için mevcut tüm kancaları kullanır ve Child tema geliştiricilerinin, bu stilleri mutlaka devre dışı bırakmadan nasıl geçersiz kılacağını bilmesi gerekir. şerefe.
Gregory

Bununla ilgili gördüğüm sorun, child_theme_enqueue_style'ın çocuk stilini daha yüksek bir önceliğe yükleyeceği, wp_head'in aşağısında AMA alt stil sayfasını çoğaltacağı - Wordpress otomatik olarak alt stil sayfasını normal önceliğine yükleyecek ve sonra tekrar yükleyecek, daha da yeni önceliğe sahip. Diğer tüm stil sayfalarını geçersiz kılma sonucunu elde ederken, sayfada yinelenen bir stil sayfası oluşturur.
php-b-greyder

2

benim stilleri basamaklı son söz olduğunu garanti etmenin tek yolu onları wp_head kanca üzerinden <head> sonunda dahil etmek oldu. wp_enqueue doğrudan bağlantıyı yankı vardı wp_head içinde çalışmıyor:

function gregory_enqueue_stylesheets() {
    $base = get_stylesheet_directory_uri();
    echo '<link rel="stylesheet" href="'.$base.'/style-gregory.css" type="text/css" media="all">';
    return;
}
add_action( 'wp_head', 'gregory_enqueue_stylesheets', 18 );

Son olarak, stilleri göreceli olarak ve yüksek düzeyde özgüllük veya sadece son çare olarak kullanılması gereken!

WP'nin daha iyi bir tarzı sıkma sistemine ihtiyacı vardır. ister dosya bağlantısı ister satır içi stil olsun her stil, Önceliklerin siparişlerini belirleyebilmeleri için aynı kancadan geçirilmelidir. isteğe bağlı olarak hata ayıklama amacıyla, çağanozun her bir stilin Öncelik değerlerini belki de yorumlanmış biçimde çıkarması yararlı olacaktır.

Güncelleme

Üst temamın (ana stil sayfası, alt stil sayfası ve birkaç stil ifadesini kullanan) orijinal kademesini korurken, alt öğemdeki stillerin kontrolünü, stil sayfamı açıklandığı gibi ikiye bölerek koruyabildim soru. Artık wp_head () kanca kullanmıyorum, bunun yerine stil sayfamın son yüklendiğinden emin olmak için yüksek bir ordinal ile uygun ve standart wp_enqueue_scripts () kanca kullanıyorum.

Çocuk temamın varsayılan stil sayfası:

/*
Theme Name: Oenology-Gregory
Template: oenology
Version: 20120506-0026
*/

@import url("/wp-content/themes/oenology/style.css");

benim ana stil sayfasını enqueue fonksiyonu:

function gregory_enqueue_stylesheets() {
    $base = get_stylesheet_directory_uri();
    wp_enqueue_style( 'style-gregory', $base.'/style-gregory.css' );
    return;
}
add_action( 'wp_enqueue_scripts', 'gregory_enqueue_stylesheets', 18 );

Ancak, stil sayfamdan sonra belirtilen birkaç WP tarafından oluşturulan stil deyimi (yani, ana tema değil) var ve beni ilgilendiren kuralları geçersiz kılmak için yüksek özgüllüklü css kurallarını kullanmaya bakmam veya özellikle body.custom-background kuralı gibi bunları devre dışı bırakmak için kancalar.

yorumlarınız için hepinize teşekkür ederim.

alkış,
Gregory


1

Sen gerektiğini hep kullanmak wp_enqueue_style()için stil yüklemek ve bu fonksiyonlar için çengel olmalıdır wp_enqueue_scripts ile kanca kafasında çalışır . Ben orada onu kanca olmadığından şüpheleniyorum, bu yüzden senin sorunun. (WP 3.3'ten itibaren, wp_enqueue_style()başka bir şeye takılırsa, WP_Debug açıkken bir Uyarı atar).


@ Chip'in cevabı benimkinden daha iyi ve Oenology temasını tartışmak için tartışmasız daha nitelikli;) Bu doğru-ish olmasına rağmen cevabımı silmem gereken bir durum mu?
mrwweb

Hayır, cevabınızı bırakardım. Doğru ve sorunun belirli bir bölümünü ele alıyor.
Chip Bennett
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.