2012-09-22 12 views
10

मैं एक बच्चे विषय के लिए थीमैटिक ढांचे का उपयोग कर रहा हूँ। इसमें कई हुक हैं, लेकिन मैं विशेष रूप से thematic_header() देख रहा हूं। Thematic_header() हुक निम्नलिखित क्रियाओं को जोड़ता है (add_action के माध्यम से):वर्डप्रेस में मैं एक्शन प्राथमिकता कैसे बदल सकता हूं?

<?php 
    add_action('thematic_header', 'thematic_brandingopen', 1); 
    add_action('thematic_header', 'thematic_blogtitle', 3); 
    add_action('thematic_header', 'thematic_blogdescription', 5); 
    add_action('thematic_header', 'thematic_brandingclose', 7); 
    add_action('thematic_header', 'thematic_access', 9); 
?> 

क्रियाओं की सामग्री अप्रासंगिक है।

मेरा प्रश्न यह है: मैं प्रश्न में पांच कार्यों की प्राथमिकताओं को कैसे बदल सकता हूं। उदाहरण के लिए, मैं thematic_access() को thematic_brandingopen() से पहले लोड करना चाहता हूं।

<?php 
    function remove_thematic_actions() { 
    remove_action('thematic_header', 'thematic_access'); 
    add_action('thematic_header', 'thematic_access', 0); //puts it above thematic_brandingopen 
    } 
    add_action ('init', 'remove_thematic_actions'); 

कि बहुत सरल कुछ को पूरा करने का एक बेवकूफ तरीका की तरह लगता है: केवल यह है कि मैं यह पता लगाने कर लिया है करने के लिए जिस तरह से दूर करने और कार्रवाई, आला फिर से जोड़कर है। WP में जो भी डेटा संरचना स्टोर कार्यों को एक्सेस और क्रमबद्ध/पुन: व्यवस्थित करने का कोई तरीका है?

उत्तर

6

से WordPress

अगर एक हुक 10 के डिफ़ॉल्ट के अलावा किसी अन्य प्राथमिकता का उपयोग कर दर्ज किया गया है, तो आप भी कॉल में प्राथमिकता remove_action को निर्दिष्ट करना होगा()।

तो मैं आपको पहले निम्न

remove_action('thematic_header', 'thematic_brandingopen', 1); 
remove_action('thematic_header', 'thematic_access', 9); 

और जोड़ें का उपयोग करके निकाल सकते हैं लगता है कि फिर से अलग करने के लिए priority

add_action('thematic_header', 'thematic_access', 1); 
add_action('thematic_header', 'thematic_brandingopen', 2); 
+0

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

+1

मुझे लगता है कि यह एक वर्ग संपत्ति है और इसे निजी/संरक्षित घोषित किया जा सकता है लेकिन सार्वजनिक नहीं। हो सकता है कि सीधे, आईएमओ तक पहुंच न हो। –

+0

बस अगर यह किसी की मदद करता है, तो सभी हुक किए गए कार्यों को वैश्विक वैरिएबल में संग्रहीत किया जाता है जिसे $ wp_filter कहा जाता है, जो कुंजी के साथ एक सरणी है। – ljelewis

5

नहीं स्वयं को बढ़ावा देने का उपयोग कर, लेकिन मैं करने के लिए इस पर कुछ काम किया है Prioritize Hooks नामक एक वर्डप्रेस प्लगइन के माध्यम से एक गैर-कोडिंग समाधान प्रदान करें। मेरी प्लगइन आपको यूआई के माध्यम से विभिन्न पंजीकृत हुक की प्राथमिकताओं को सेट करने देती है और रनटाइम में ओवरराइडिंग करती है ताकि कोड संशोधित न हो।

+0

धन्यवाद! मैं कोडिंग समाधान की तलाश में था, लेकिन, कम से कम, यह एक दिलचस्प समाधान है। अच्छा काम करते रहें! :) – eldarshamukhamedov

3

शायद ज़रुरत पड़े इस कोई मदद करता है, चर कार्यों जमा हो जाती है है में

global $wp_filter; 
var_dump($wp_filter[$hook_name]); 

कौन सा कुंजी प्राथमिकता किया जा रहा है जब कार्रवाई जोड़ा गया है के साथ सरणियों की एक सरणी है।

+1

इससे मदद मिली कि मुझे कॉलबैक के रूप में कक्षा विधि का उपयोग कर कक्षा में एक ऐसी क्रिया को हटाने में कठिनाई हुई थी। "ठीक से" कार्रवाई को हटाने के तरीके के बारे में कई जवाब हैं, लेकिन वे काफी शामिल हैं और सशर्त रूप से काम करते हैं। मैंने अभी वैश्विक $ wp_filter जोड़ा; और अनसेट ($ wp_filter ['hookname'] [प्राथमिकता]); – Exit

संबंधित मुद्दे