प्रसंग
मैंने ट्वेंटी तेरह पर आधारित एक बाल विषय बनाया, जो काफी अच्छी तरह से काम करता है। माता-पिता की थीम को संस्करण 1.3 में अपडेट करने के बाद, मैंने स्टाइल के साथ अजीब व्यवहार को देखा जो एक कैश्ड माता-पिता की थीम के कारण था style.css।
यहाँ मेरे बाल विषय की सामग्री है style.css(हेडिंग छोड़ कर)
/* =Imports styles from the parent theme
-------------------------------------------------------------- */
@import url('../twentythirteen/style.css');
इसलिए चाइल्ड थीम style.cssपेरेंट थीम को इंपोर्ट करने से ज्यादा कुछ नहीं करती style.css।
मेरे पास अपने बच्चे के विषय के अनुकूलन के साथ एक और सीएसएस फ़ाइल भी है जिसे मैं इसमें पसंद करता हूं functions.php:
// Enqueue parent theme's style.css (faster than using @import in our style.css)
$themeVersion = wp_get_theme()->get('Version');
// Enqueue child theme customizations
wp_enqueue_style('child_main', get_stylesheet_directory_uri() . '/css/main.css',
null, $themeVersion);
यह मुझे इस तरह से एक बहुत अच्छा सीएसएस url domain.com/wp-content/themes/toutprettoutbon/css/main.css?ver=1.0.1देता है : यह सुनिश्चित करता है कि चाइल्ड थीम अपडेट होने पर स्टाइल शीट फिर से लोड की जाती है।
अब समस्या
बयान @import url('../twentythirteen/style.css');अंतर्निहित मूल विषय के संस्करण से पूरी तरह से स्वतंत्र है। वास्तव में, मूल विषय को चाइल्ड थीम को अपडेट किए बिना अपडेट किया जा सकता है लेकिन ब्राउज़र अभी भी पुराने के कैश्ड संस्करणों का उपयोग करेंगे ../twentythirteen/style.css।
ट्वेंटी तेरह में प्रासंगिक कोड style.css:
function twentythirteen_scripts_styles() {
// ...
// Add Genericons font, used in the main stylesheet.
wp_enqueue_style( 'genericons', get_template_directory_uri() . '/genericons/genericons.css', array(), '3.03' );
// Loads our main stylesheet.
wp_enqueue_style( 'twentythirteen-style', get_stylesheet_uri(), array(), '2013-07-18' );
// Note usage of get_stylesheet_uri() which actually enqueues child-theme/style.css
// Loads the Internet Explorer specific stylesheet.
wp_enqueue_style( 'twentythirteen-ie', get_template_directory_uri() . '/css/ie.css', array( 'twentythirteen-style' ), '2013-07-18' );
}
add_action( 'wp_enqueue_scripts', 'twentythirteen_scripts_styles' );
मैं इस समस्या को हल करने के कुछ तरीकों के बारे में सोच सकता हूं लेकिन कोई भी वास्तव में संतोषजनक नहीं है:
पैरेंट थीम को
style.css(जैसे@import url('../twentythirteen/style.css?ver=NEW_VERSION');) बदलने के लिए हर बार पैरेंट थीम को अपडेट करने के लिए मेरे बच्चे की थीम को अपडेट करें । यह मूल विषय संस्करण और बच्चे के बीच एक अनावश्यक और कष्टप्रद लिंक बनाता है।मेरे बच्चे की में
functions.php, 1)wp_dequeue_styleशामिल बच्चे विषय केstyle.cssऔर 2) माता-पिता विषय है संस्करण स्ट्रिंग के साथ सीधे। यह मूल विषय में कतारबद्ध सीएसएस के क्रम को गड़बड़ कर देता है।wp_enqueue_stylestyle.cssstyle_loader_tagजनरेट किए गए सीएसएस<link>टैग को संशोधित करने के लिए फ़िल्टर का उपयोग करेंstyle.cssऔर सीधे पैरेंट थीम केstyle.cssसंस्करण स्ट्रिंग के साथ इंगित करने के लिए पथ को संशोधित करें । ऐसी सामान्य आवश्यकता (कैश बस्ट) के लिए अस्पष्ट लगता है।style.cssमेरे बच्चे के विषय में माता-पिता के विषय को डंप करेंstyle.css। के रूप में ही (1) वास्तव में, लेकिन थोड़ा तेज।मेरे बच्चे के विषय
style.cssको माता-पिता के विषय का हमदर्द बना देंstyle.css। यह काफी हैकिश लगता है ...
क्या मुझे कुछ याद आया? कोई सुझाव?
संपादित करें
पैरेंट थीम में जोड़े गए genericicons.cssऔर ie.cssस्टाइल शीट स्पष्ट करें कि मैं अपने चाइल्ड थीम में @importcss स्टेटमेंट को क्यों नहीं बदल सकता wp_enqueue_style। वर्तमान में, @importमेरे बाल विषय में एक कथन के साथ style.css, मेरे पास उत्पन्न पृष्ठों में यह क्रम है:
- बीसवीं / जेनेरिक / जेनेरिक.कैंस -> मूल विषय के अनुसार
- child-theme / style.css -> मूल विषय द्वारा प्रवर्तित, @imports बीसवेंथ / style.css
- बीसवीं / सीएसएस / ie.css -> मूल विषय द्वारा enqueued
- चाइल्ड-थीम / css / main.css -> चाइल्ड थीम द्वारा एन्केस्ड
अगर मैं माता-पिता की style.cssनिर्भरता के बारे में सोचता हूं main.css, तो यह बन जाएगा:
- बीसवीं / जेनेरिक / जेनेरिक.कैंस -> मूल विषय के अनुसार
- चाइल्ड-थीम / स्टाइल.क्स -> खाली, अभिभावक थीम द्वारा एन्केस्ड
- बीसवीं / सीएसएस / ie.css -> मूल विषय द्वारा enqueued
- बीसवीं / शैली। एसकेएस -> मुख्य विषय पर निर्भरता के रूप में बच्चे के विषय के अनुसार
- चाइल्ड-थीम / css / main.css -> चाइल्ड थीम द्वारा एन्केस्ड
ध्यान दें कि ie.css अब मूल विषय से पहले शामिल है style.css। मैं मूल विषय की सीएसएस फ़ाइलों के enqueuing क्रम को बदलना नहीं चाहता क्योंकि मैं यह नहीं मान सकता कि इससे सीएसएस नियमों की प्राथमिकता के साथ समस्या नहीं होगी।
style.cssको उसी स्थान पर शामिल नहीं किया जाएगा जैसा अभी है। माता-पिता में अन्य सीएसएस फाइलें शामिल हैं, जो इसके style.cssऔर मेरे बच्चे के विषय सीएसएस के बीच आनी चाहिए ।
@import, मूल विषय की स्टाइलशीट को अपनी स्वयं की स्टाइलशीट की निर्भरता के रूप में सेट करें ।