after_setup_theme हमेशा चलता रहता है


11

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

echo '<script type="text/javascript">alert("This action was run")</script>';

और परिणामस्वरूप प्रत्येक व्यवस्थापक अनुरोध और हर फ्रंट-एंड अनुरोध पर एक जावास्क्रिप्ट अलर्ट मिलता है (मेरे पास एक नेटवर्क सेटअप है, इसलिए स्पष्ट रूप से उन साइटों पर जहां यह विषय सक्रिय नहीं है, यह फ़ंक्शन नहीं चला रहा है)

तो सवाल यह है कि क्या यह बग है? क्या मैं किसी तरह कुछ गलत कर रहा हूं? यहाँ पूरा कोड है जो मैं उपयोग कर रहा हूँ:

add_action( 'after_setup_theme', 'fwp_setup' );
function fwp_setup(){
    // -- Unrelated code remove for the sake of brevity 
    require_once($_SERVER['DOCUMENT_ROOT'].'/wp-admin/includes/plugin.php');
    activate_plugin('enable-media-replace/enable-media-replace.php');
    activate_plugin('seo-image/seo-friendly-images.php');
    activate_plugin('w3-total-cache/w3-total-cache.php');
    echo '<script type="text/javascript">alert("This action was run")</script>';
}

किसी भी जानकारी के लिए बहुत सराहना की जाएगी!


समाधान: after_switch_themeवही करता है जो मैं यहाँ चाहता था। यह थीम के आपकी थीम पर स्विच करने के बाद आग लग जाती है। नीचे दिए गए समाधानों में से एक का उपयोग करता है switch_theme। इसके वांछित परिणाम नहीं हैं, क्योंकि यह केवल आपके विषय से दूर जाने पर होता है। इस Trac टिप्पणी का संदर्भ
हारून वैगनर

कृपया अपने प्रश्न के लिए टिप्पणी के रूप में उत्तर के रूप में पोस्ट करें। :)
चिप बैनेट

2
क्षमा याचना। यह मुझे अभी तक ऐसा नहीं करने देगा। मैं इसे थोड़ा सा उत्तर के रूप में जोड़ूंगा।
आरोन वैगनर

जवाबों:


8

समाधान: after_switch_themeवही करता है जो मैं यहाँ चाहता था। यह थीम के आपकी थीम पर स्विच करने के बाद आग लग जाती है। नीचे दिए गए समाधानों में से एक का उपयोग करता है switch_theme। इसके वांछित परिणाम नहीं हैं, क्योंकि यह केवल आपके विषय से दूर जाने पर होता है।

यहाँ एक लेख है जिसे मैंने संदर्भ के रूप में पाया: http://core.trac.wordpress.org/ticket/7795#comment:29

यहाँ मेरा संशोधित कोड है

add_action( 'after_switch_theme', 'fwp_theme_setup' );
function fwp_theme_setup(){ 
    require_once($_SERVER['DOCUMENT_ROOT'].'/wp-admin/includes/plugin.php');
    activate_plugin('enable-media-replace/enable-media-replace.php');
    activate_plugin('seo-image/seo-friendly-images.php');
    activate_plugin('w3-total-cache/w3-total-cache.php');
}

5

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

दूसरे शब्दों में, उस after_setup_themeबिंदु का प्रतिनिधित्व करता है जिस पर वर्डप्रेस वर्तमान थीम सेट करता है, कि वह बिंदु जिस पर व्यवस्थापक सक्रिय करता है और / या वर्तमान थीम को कॉन्फ़िगर करता है।

आप जो खोज रहे हैं वह एक थीम सक्रियण हुक है, जो वर्तमान में उपलब्ध नहीं है, लेकिन विचाराधीन है / विकास


कोडेक्स प्रविष्टि लिंक बहुत भ्रामक है। यह कहता है "इस हुक को थीम इनिशियलाइज़ेशन के दौरान कहा जाता है।" इसका मतलब है, मेरे लिए, कि हुक सक्रिय होने पर कॉल किया जाना चाहिए। मैं समझता हूँ कि आप क्या कह रहे हैं। बेहद भ्रामक है।
एरोन वैगनर

5
init !== activation। आम तौर पर आप __construct()php में फ़ंक्शन को भी एक initफ़ंक्शन कहते हैं। इसका अर्थ है: उदाहरण को प्रारंभ करें।
kaiser

टीआरसी टिकट 7 साल पुराना है और लगता है कि तय नहीं किया जाएगा!
numediaweb

4

दुर्भाग्य से कोई थीम-सक्रियण हुक नहीं है। हालाँकि, यह प्रश्न इसके लिए एक कार्य-प्रदान करता है।

प्लग-इन को सक्रिय करने के लिए बस 'थीम एक्टिवेशन हुक' का उपयोग करें।

एक बेहतर समाधान, एक ही नस के साथ यह एक है । दोनों अनिवार्य रूप से switch_themeहुक का उपयोग करते हैं।


ओपी टिप्पणियों और लिंक किए गए टीआरसी टिकट के अनुसार - after_switch_themeहुक आवश्यक है।

यह एक तर्क के रूप में पुराने विषय का नाम देता है। हालांकि, अगर यह आपके functions.php(जो यह होना चाहिए ...) में कॉलबैक केवल तभी फायर करेगा जब आपका थीम सक्रिय हो रहा हो

add_action( 'after_switch_theme', 'wpse50298_setup' );
function wpse50298_setup($theme_switching_from){
    // Your theme is being activated
}

इसी तरह एक कॉलबैक जोड़ें switch_themeकेवल तभी बुलाया जाएगा जब आपका विषय डी-एक्टिवेट हो जाएगा।

add_action( 'switch_theme', 'wpse50298_deactivate' );
function wpse50298_deactivate($theme_switching_to){
    // Your theme is being deactivated
}

इनमें से किसी भी विकल्प ने मेरे लिए काम नहीं किया। switch_themeकेवल विषय को निष्क्रिय करने के बाद काम किया। हालांकि, after_switch_themeपूरी तरह से काम किया।
एरोन वैगनर

1
अद्यतन उत्तर :)
स्टीफन हैरिस

switch_theme अब काम नहीं करता है। मुझे लगता है कि यह 3.4 सक्रियता में परिवर्तन के कारण है। कम से कम यह मेरे लिए काम नहीं कर रहा है।
जेक

after_switch_theme सही काम करता है। यह स्वीकृत उत्तर होना चाहिए। मैं
आर्डी अराम

0

थॉमस ग्रिफिन के प्लगइन सक्रियण स्क्रिप्ट का उपयोग करने के लिए एक बेहतर समाधान हो सकता है । यह उपयोगकर्ताओं को अपनी पसंद के प्लगइन्स इंस्टॉल करने के लिए प्रेरित करेगा जब विषय उपयोग में होगा। मुझे लगता है कि यह थीम से प्लगइन को अलग करने का एक शानदार तरीका है, और अभी भी इसका उपयोग मिलता है।

अपने विषय के भीतर, जांचें कि क्या यह फ़ंक्शन का उपयोग करने से पहले प्लगइन सक्रिय है। यह उपयोगकर्ताओं को अधिक विकल्प और नियंत्रण की अनुमति देगा।

आप नैकपैक के साथ आसानी से सक्रियण स्क्रिप्ट सेट कर सकते हैं ।



0

आपका सबसे अच्छा फिक्स अब switch_themeहुक का उपयोग करना होगा और पास किए गए '$ थीम' तर्क को फ़िल्टर करना होगा, यह देखने के लिए कि क्या यह वर्तमान है तो वापस नहीं;

function nw_update_network($theme) {
   if ($theme !== 'my_theme_name') return;

   // Your code here
}

add_action('switch_theme', 'nw_update_network');
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.