मैं अपने बच्चे के विषय को फिर से कैसे लागू करूं जो कि उसके माता-पिता के सक्रिय होने पर अनुकूलित की गई सेटिंग्स को लागू करें?


17

परिदृश्य

  1. 2015 की थीम चुनें। विभिन्न सेटिंग्स को कस्टमाइज़ करें, जैसे बैकग्राउंड पिक्चर, हेडर पिक्चर, साइट का नाम और टैगलाइन।
  2. लेकिन विषय की किसी भी फाइल की सामग्री को मत छुओ।
  3. 2015 के विषय के एक नंगे न्यूनतम बच्चे के विषय बनाने के लिए कोडेक्स चाइल्ड थीम का उपयोग करें ।
  4. नए बाल विषय को सक्रिय करें।

अरे?

इस नंगे न्यूनतम बच्चे विषय के साथ सक्रिय साइट मूल विषय से पूरी तरह से अलग दिखती है। पृष्ठभूमि और हेडर की छवि चली गई थी, और साइडबार (या हेडर) विजेट्स के सभी तरीके सक्रिय हो गए थे जो कि पैरेंट 2015 थीम में सक्रिय (डिफ़ॉल्ट रूप से) नहीं थे।

2015 थीम के लिए कुछ अनुकूलित सेटिंग्स के साथ साइट का मूल लुक:

2015 अनुकूलित विषय के साथ SofietjeWonders

साइट जैसा कि यह 2015 थीम व्युत्पन्न चाइल्ड थीम के साथ दिखता है, जिसमें केवल आवश्यक हेडर है style.cssऔर इसमें कोडेक्स के चाइल्ड थीम पेज द्वारा सुझाए गए शैलियों को ही शामिल किया गया है function.php

यहाँ छवि विवरण दर्ज करें

सवाल

मैं इसे कैसे बनाऊं ताकि बाल विषय को सक्रिय करने से मूल विषय के अनुकूलन और चूक बनी रहे?

इस स्थिति में: हेडर और बैकग्राउंड पिक्चर्स और डिफॉल्ट (साइडबार / हेडर) विजेट्स को हटाना (निष्क्रिय करना)।


टिप्पणियाँ

पहले से ही कस्टमाइज़ किए गए थीम की चाइल्ड थीम बनाएं जो एक डुप्लिकेट की तरह लग सकता है, लेकिन यह थीम की फ़ाइलों को संपादित करके कस्टमाइज़ेशन के बारे में है।

यह सवाल जब एक बच्चे के विषय को सक्रिय करता है, तो कौन सी कोर सेटिंग्स को रीसेट करना होगा; कस्टम मेनू आदि? लगता है कि वास्तव में मैं क्या होने लगता हूं। दुर्भाग्य से, एकमात्र उत्तर सुविधाओं में एक बेमेल के बारे में अटकलें लगाता है, जो मेरे लिए मामला नहीं है और उसी प्रभाव के लिए ओपी की टिप्पणी पर नहीं उठाया।

मैंने भी देखा

जवाबों:


9

मैंने @ webtoure के उत्तर के लिए +1 दिया क्योंकि यह आपको सही दिशा देता है, हालांकि मुझे लगता है कि इसमें कुछ जांचों का अभाव है।

सबसे पहले यह जाँच नहीं करता है कि जिस विषय को सक्रिय किया जा रहा है वह एक बाल विषय है, और यह जाँच नहीं करता है कि पहले सक्रिय विषय बाल विषय का मूल विषय है।

ओपी की मेरी समझ के अनुसार इन स्थितियों की आवश्यकता है।

इसके अलावा, एक समस्या जो आपको ध्यान में रखने की ज़रूरत है कि बच्चे के विषय के थीम मॉड के सक्रिय होने के साथ क्या करना है, अगर वे पहले से मौजूद हैं।

@Webtoure उत्तर में, वे एक बैकअप में संग्रहीत होते हैं, जो आपको कुछ परिस्थितियों में बचा सकता है, लेकिन वर्डप्रेस उन्हें डिफ़ॉल्ट रूप से नहीं पहचानेंगे और इसलिए उन्हें कुछ अतिरिक्त कोड का उपयोग करने की आवश्यकता होती है।

मुझे लगता है कि यह बेहतर होगा कि पहली बार चाइल्ड थीम सक्रिय होने पर पेरेंट थीम से थीम में बदलाव किया जाए ।

संक्षेप में, मैं मूल विषयों से विषय मोड के वारिस होने से पहले जिन स्थितियों को जांचना चाहता हूं वे हैं:

  • पहले सक्रिय थीम उस चाइल्ड थीम के माता-पिता का होना चाहिए जो सक्रिय हो रहा है
  • बच्चा विषय जो सक्रिय हो रहा है, उसे पहले कभी सक्रिय नहीं किया गया है

दूसरी स्थिति सुनिश्चित करने के लिए मैं एक कस्टम विकल्प का उपयोग करूंगा, क्योंकि वर्डप्रेस इस चेक को करने का एक तरीका प्रदान नहीं करता है।

यह कोड है, जो चल रहा है उसकी व्याख्या के लिए कृपया इनलाइन टिप्पणियां पढ़ें:

add_action( 'switch_theme', function( $new_name, \WP_Theme $new_theme ) {

    // get the previously active theme
    $previous = get_option( 'theme_switched', -1 );

    // get the parent of current theme, will be false if no parent
    $parent = $new_theme->parent() ? $new_theme->get_template() : false;

    // current stylesheet name
    $stylesheet = get_option( 'stylesheet' );

    // has the theme being activated ever been activated before?
    $lastActive = get_option( $stylesheet . '_last_active', false );

    // if previouly active theme is the parent of the the child theme being activated
    // and it has never been activated before..
    if ( ! $lastActive && $parent === $previous ) {

        // update "last_active" option so following code won't run again for this theme
        update_option( $stylesheet . '_last_active', current_time( 'timestamp', 1 ) );

        // get the theme mods of the parent
        $previousMods = get_option( 'theme_mods_' . $parent, array() );

        // inherit current theme mods from parent theme mods
        update_option( 'theme_mods_' . $stylesheet, $previousMods );
    }

}, 10, 2 );

संबंधित का आपका पहला बिंदु वास्तव में न्यायसंगत नहीं है: यदि वर्तमान विषय बाल विषय नहीं है, तो get_templateबस वर्तमान विषय का dir नाम वापस आ जाएगा। आपको पहले से सक्रिय विषय और वर्तमान एक के बीच के संबंध को जानने की जरूरत नहीं है: यदि विषय में माता-पिता हैं तो यह उन सेटिंग्स को लोड करता है अन्यथा यह केवल अपनी सेटिंग्स लोड करता है। मैं हालांकि आपके दूसरे बिंदु से सहमत हूं जो सेटिंग्स के मुद्दे को अधिलेखित किया जा रहा है।
webtoure

इसके अलावा, क्या होगा अगर उपयोगकर्ता गलती से वांछित बाल विषय को सक्रिय करने से पहले किसी अन्य विषय को सक्रिय करता है? कोड काम नहीं करेगा और (ए theme_switched, current_theme) संबंध शुरू करने के लिए अप्रासंगिक है।
webtoure

1
@MarjanVenema अगर आप वेबटूर को इनाम देंगे तो मुझे बहुत खुशी होगी ।
gmazzap

1
@MarjanVenema gmazzap ने वास्तव में उनकी विचार प्रक्रिया के लिए टिप्पणियां प्रदान कीं और मेरे स्निपेट में सुधार का सुझाव भी दिया। मुझे लगता है कि अगर कोई भी इस योग्य है, तो वह उसका है। इसके अलावा, मैं पूरी तरह से बेकार अंकों के लिए सवालों के जवाब नहीं देता। मैं प्यार करता हूँ: लोगों के साथ बातचीत करना, चुनौतियाँ और आम तौर पर जब मैं कर सकता हूँ तब मदद करना।
webtoure

1
कृपया चैट के लिए विस्तारित चर्चा करें, टिप्पणियाँ उनके लिए नहीं हैं। :)
दुर्लभ
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.