मैं अपने माता-पिता की स्टाइलशीट / स्टेटमेंट के बाद अपने चाइल्ड स्टाइलशीट / एस * को कैसे कतार में रखूं?


11

मैं चिप बेनेट द्वारा अपने स्वयं के बाल विषय के अभिभावक के रूप में अच्छी तरह से लिखी गई ओएनोलॉजी थीम का उपयोग कर रहा हूं।

अपनी विकास प्रक्रिया में, मुझे पता चला है कि शैलियों को नियंत्रित करने की बात आने पर बाल विषयों को लिखने वाले लोगों के लिए कुछ चुनौतियाँ होती हैं।

मैंने अभी-अभी पता लगाया है कि मेरा मुख्य style.css फ़ाइल <head> में हर दूसरे स्टाइलशीट लिंक या स्टेटमेंट से पहले लोड हो जाता है, और यह बताता है कि मुझे कुछ पेरेंट शैलियों को ओवरराइड करने में परेशानी क्यों हो रही थी।

समस्या के आगे के अध्ययन से पता चलता है कि विभिन्न पेरेंट स्टाइलशीट और शैलियों को तीन स्थानों में <head> में पंक्तिबद्ध किया जा सकता है; add_action('wp_print_styles',, add_action('wp_enqueue_scripts',और फिर add_action('wp_head',

चीजों को सरल रखने के लिए, मैं दो स्टाइलशीट बनाने की योजना बना रहा हूं। पहले मुख्य 'style.css' शीट में केवल @import url()कमांड शामिल होगी , जिसे ओनोलॉजी की मुख्य स्टाइलशीट लोड करने की आवश्यकता होगी।

दूसरी स्टाइलशीट में मेरे बाल नियम होंगे। यह सुनिश्चित करने के लिए कि यह सभी अन्य नियमों के बाद लोड किया गया है, मैं इसका उपयोग करके कतारबद्ध करूँगा add_action( 'wp_head',

क्या यह आवाज़ उचित है? या क्या यह करने के लिए एक बेहतर (अधिक सही) तरीका है?

btw, क्या किसी को पता है कि '/parent-theme/style.css ? MRPreviewRefresh = 723 ' का क्या मतलब है?

अपडेट करें

wp_enqueue_style () wp_head () में काम नहीं करता है।

चीयर्स,
ग्रेगरी

जवाबों:


21

सिर्फ FYI करें, यह सवाल संभवत: बहुत स्थानीयकृत है , क्योंकि यह ओएनोलॉजी थीम के लिए विशिष्ट है।

उस ने कहा, यहाँ मुझे लगता है कि तुम एक समस्या हो रही है: ऑनेओलॉजी दो शैली पत्रक enqueues:

  1. style.css, सीधे दस्तावेज़ सिर में (इस प्रकार पहले wp_head() निकाल दिया जाता है)
  2. {varietal}.css, पर wp_enqueue_scripts, प्राथमिकता के साथ 11, में 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 );
    

Varietal स्टाइलशीट, जो "स्किन" पर लागू होती है, प्राथमिकता पर ध्यान केंद्रित करती है 11, यह सुनिश्चित करने के लिए कि बेस स्टाइलशीट, पहलेstyle.css लोड करता है , और varietal स्टाइलशीट सही कैस्केड का कारण बनता है, दूसरा लोड करता है ।

इसलिए, यदि आपको वैरिएटल स्टाइलशीट को ओवरराइड करने की आवश्यकता है, तो बस वैरिएटल स्टाइलशीट के बाद अपनी दूसरी स्टाइलशीट को एनेक्यू करें ; कम से कम 12या अधिक की प्राथमिकता के साथ ।

संपादित करें

अधिक सामान्य प्रश्न के लिए, अधिक सामान्य उत्तर देने के लिए:

पेरेंट थीम स्टाइलशीट एन्क्यू को ओवरराइड करने के लिए, आपको दो बातें जानने की जरूरत है:

  1. कार्रवाई हुक , जिस पर स्टाइलशीट कतारबद्ध है
  2. प्राथमिकता , जिस पर कॉलबैक हुक में जोड़ा जाता है

हुक और / हुक के बीच कहीं भी एन्क्यू फ़ंक्शन ( wp_enqueue_script()/ wp_enqueue_style()) को ठीक से निष्पादित किया जा सकता है । ( कार्य को निष्पादित करने के लिए वर्तमान में सही हुक ) वर्तमान में इस सूची में निम्नलिखित क्रियाएं शामिल हैं (दूसरों के बीच, ये सिर्फ सामान्य संदिग्ध हैं):initwp_print_scriptswp_print_styleswp_enqueue_*()wp_enqueue_scripts

  • init
  • wp_head
  • wp_enqueue_scripts
  • wp_print_scripts/wp_print_styles

(ध्यान दें कि wp_enqueue_scripts, wp_print_styles, और wp_print_scripts सभी आग के अंदर की wp_head, एक विशेष प्राथमिकता पर

इसलिए, पेरेंट-थीम स्टाइलशीट को ओवरराइड करने के लिए, आपको निम्न में से एक करने की आवश्यकता है:

  • पैरेंट-थीम स्टाइलशीट के माध्यम से डी-एनकेयू करेंwp_dequeue_style( $handle )
  • शैली के माध्यम से, जो बाते थीम जनक कॉलबैक को निकालेंremove_action( $hook, $callback )
  • पेरेंट-थीम स्टाइलशीट को ओवरराइड करने के लिए सीएसएस कैस्केड का उपयोग करें , अपने बाल-थीम स्टाइलशीट wp_enqueue_style()कॉल को कम प्राथमिकता के साथ या बाद के हुक में हुक करके

    यदि माता-पिता थीम का उपयोग करते हैं, तो इस अंतिम विकल्प के लिए:

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

    ... तो बाल थीम का उपयोग होगा:

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

धन्यवाद चिप। मैं वास्तव में wp_enqueue_scripts और पिछले लोड करने के लिए मेरी बाल स्टाइलशीट प्राप्त करने के लिए एक उच्च अध्यादेश का उपयोग कर सकता हूं। हालांकि मेरे बाल स्टाइलशीट स्टेटमेंट के बाद भी 3 अलग-अलग स्टाइल स्टेटमेंट हैं। उनमें से 2 WP द्वारा ही आउटपुट हैं !!!, और 1 wp के add_custom_image_header () फ़ंक्शन के माध्यम से ओएनोलॉजी द्वारा आउटपुट है।
ग्रेगरी

body.custom- पृष्ठभूमि शैली कथन WP द्वारा स्वयं आउटपुट है, लेकिन ऐसा प्रतीत होता है कि मैं 'BACKGROUND_COLOR' को परिभाषित करके एक कस्टम पृष्ठभूमि रंग निर्दिष्ट कर सकता हूं। एक अजीब सीएसएस नियम एक कस्टम WP स्थिरांक के माध्यम से सेट करने की आवश्यकता होगी।
ग्रेगरी

1
अंतिम टिप्पणी चिप। यह प्रश्न बहुत अधिक स्थानीय नहीं है। कई थीम सभी उपलब्ध हुक का उपयोग करने के लिए स्टाइल या प्रिंट करेंगी, और चाइल्ड थीम डेवलपर्स को यह जानने की आवश्यकता है कि उन शैलियों को बिना अक्षम किए कैसे ओवरराइड किया जाए। खुश होती है।
ग्रेगरी

इसके साथ मुझे जो समस्या दिखाई दे रही है वह यह है कि child_theme_enqueue_style बच्चे की शैली को उच्च प्राथमिकता के साथ लोड करेगा, आगे wp_head नीचे, लेकिन यह बाल स्टाइलशीट को डुप्लिकेट करेगा - Wordpress अपनी सामान्य प्राथमिकता पर बच्चे की स्टाइलशीट को स्वतः लोड करेगा और फिर, इसे फिर से लोड करेगा। नई प्राथमिकता के साथ आगे नीचे। जबकि यह अन्य सभी स्टाइलशीट को ओवरराइड करने के परिणाम को प्राप्त करता है, यह पेज में एक डुप्लिकेट स्टाइलशीट बनाता है।
php-b-grader

2

यह सुनिश्चित करने का एकमात्र तरीका कि मेरी शैलियों का कैस्केड में अंतिम रूप था, उन्हें wp_head हुक के माध्यम से <head> के अंत में शामिल करना था। wp_enqueue wp_head में काम नहीं करता है इसलिए मुझे सीधे लिंक को इको करना पड़ा:

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 );

अंत में, मैं अपनी शैलियों को सापेक्ष सहजता के साथ, और उच्च स्तर की विशिष्टता, या महत्वपूर्ण नियम का उपयोग किए बिना सेट कर सकता हूं, जिसका उपयोग केवल अंतिम उपाय के रूप में किया जाना चाहिए।

WP को एक बेहतर स्टाइल एन्क्यूइंग सिस्टम की जरूरत है। हर शैली, चाहे एक फ़ाइल लिंक या एक इनलाइन शैली, को एक ही हुक के माध्यम से पारित किया जाना चाहिए जो वरीयता को उनके आदेश को निर्धारित करने की अनुमति देता है। वैकल्पिक रूप से डिबगिंग उद्देश्यों के लिए, यह उपयोगी होगा यदि हुक भी टिप्पणी शैली में शायद प्रत्येक शैली के प्राथमिकता मूल्यों का उत्पादन करता है।

अपडेट करें

पैरेंट थीम (जो एक मुख्य स्टाइलशीट, एक सब-स्टाइलशीट और कुछ स्टाइल स्टेटमेंट्स का उपयोग करता है) की मूल कैस्केड को बनाए रखते हुए मैं अपने बाल विषय में शैलियों पर नियंत्रण बनाए रखने में सक्षम रहा हूं, अपनी शैलीशीर्ष को दो में विभाजित करके बताया प्रश्न। मैं अब wp_head () हुक का उपयोग नहीं कर रहा हूं, इसके बजाय एक उच्च अध्यादेश के साथ उचित और मानक wp_enqueue_scripts () हुक का उपयोग कर रहा हूं ताकि यह सुनिश्चित हो सके कि मेरी स्टाइलशीट आखिरी बार भरी हुई है।

मेरे बाल विषय की डिफ़ॉल्ट स्टाइलशीट:

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

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

मेरे मुख्य स्टाइलशीट को एनकाउंटर करने का फंक्शन:

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 );

हालाँकि, कुछ WP- जनरेट किए गए स्टाइल स्टेटमेंट्स हैं (यानी, पैरेंट थीम नहीं) जो कि मेरी स्टाइलशीट के बाद बताए गए हैं , और मुझे उन नियमों को ओवरराइड करने के लिए या तो उच्च विशिष्टता वाले सीएसएस नियमों का उपयोग करना होगा, जो मुझे चिंतित करते हैं या ढूंढते हैं। उन्हें निष्क्रिय करने के लिए हुक, विशेष रूप से body.custom- पृष्ठभूमि नियम।

अपनी टिप्पणी के लिए आप सभी को धन्यवाद।

चीयर्स,
ग्रेगरी


1

आपको हमेशाwp_enqueue_style() अपनी स्टाइलशीट को लोड करने के लिए उपयोग करना चाहिए और उस फ़ंक्शन को हेड में रन के साथ wp_enqueue_scripts हुक पर हुक करना चाहिए । मुझे संदेह है कि आप इसे वहाँ हुक नहीं कर रहे थे, इसलिए आपकी समस्या है। (WP 3.3 के रूप में, अगर किसी और चीज़ के लिए आदी हो, तो यह WP_Debug चालू होने के साथ एक नोटिस फेंकता है)।wp_enqueue_style()


@ चिप का उत्तर मेरी तुलना में बेहतर है और वह ऑन्कोलॉजी विषय पर चर्चा करने के लिए यकीनन अधिक योग्य है;) क्या यह ऐसा मामला है, जहां मुझे अपना जवाब डिलीट करना चाहिए, भले ही वह सही-ईश हो?
mrwweb

नहीं, मैं आपका जवाब छोड़ दूंगा। यह सही है, और प्रश्न के एक विशिष्ट भाग को संबोधित करता है।
चिप बेनेट
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.