यहाँ इस पर कुछ यादृच्छिक विचार हैं:
प्रश्न 1
हमने दादी को कितने पैसे भेजे?
100 पेज लोड के लिए, हमने उसे 100 x $ 1 = $ 100 भेजा।
यहाँ हम वास्तव में 100 x do_action( 'init' )
कॉल का मतलब है।
इससे कोई फर्क नहीं पड़ा कि हमने इसे दो बार जोड़ा:
add_action( 'init','send_money_to_grandma' );
add_action( 'init','send_money_to_grandma' );
क्योंकि कॉलबैक और प्राथमिकताएं (डिफ़ॉल्ट 10) समान हैं ।
हम जांच सकते हैं कि वैश्विक सरणी का निर्माण करने वाले के add_action
लिए सिर्फ एक आवरण कैसे है :add_filter
$wp_filter
function add_filter( $tag, $function_to_add, $priority = 10, $accepted_args = 1 ) {
global $wp_filter, $merged_filters;
$idx = _wp_filter_build_unique_id($tag, $function_to_add, $priority);
$wp_filter[$tag][$priority][$idx] = array(
'function' => $function_to_add,
'accepted_args' => $accepted_args
);
unset( $merged_filters[ $tag ] );
return true;
}
यदि हमने हालांकि प्राथमिकता बदल दी है:
add_action( 'init','send_money_to_grandma', 9 );
add_action( 'init','send_money_to_grandma', 10 );
फिर हम उसे 2 पेज $ 1 प्रति पेज लोड या 100 पेज लोड के लिए $ 200 भेजेंगे।
अगर कॉलबैक अलग हो तो समान:
add_action( 'init','send_money_to_grandma_1_dollar' );
add_action( 'init','send_money_to_grandma_also_1_dollar' );
प्रश्न 2
यदि हम यह सुनिश्चित करना चाहते हैं कि हम केवल दादी $ 1 भेजें
यदि हम इसे प्रति पृष्ठ लोड के बाद एक बार भेजना चाहते हैं , तो इसे ऐसा करना चाहिए:
add_action( 'init','send_money_to_grandma' );
क्योंकि init
हुक केवल एक बार निकाल दिया जाता है। हमारे पास अन्य हुक हो सकते हैं जो प्रति पृष्ठ लोड पर कई बार फायर करते हैं।
चलो कॉल करो:
add_action( 'someaction ','send_money_to_grandma' );
लेकिन क्या होता है अगर someaction
प्रति पृष्ठ लोड में 10 बार आग लगती है?
हम send_money_to_grandma()
फ़ंक्शन को समायोजित कर सकते हैं
function send_money_to_grandma()
{
if( ! did_action( 'someaction' ) )
internetofThings("send grandma","$1");
}
या एक काउंटर के रूप में एक स्थिर चर का उपयोग करें :
function send_money_to_grandma()
{
static $counter = 0;
if( 0 === $counter++ )
internetofThings("send grandma","$1");
}
यदि हम केवल इसे एक बार (कभी भी) चलाना चाहते हैं, तो हम विकल्प एपीआई केwp_options
माध्यम से तालिका में एक विकल्प दर्ज कर सकते हैं :
function send_money_to_grandma()
{
if( 'no' === get_option( 'sent_grandma_money', 'no' ) )
{
update_option( 'sent_grandma_money', 'yes' );
internetofThings( "send grandma","$1" );
}
}
अगर हम हर दिन एक बार उसका पैसा भेजना चाहते हैं, तो हम Transient API का उपयोग कर सकते हैं
function send_money_to_grandma()
{
if ( false === get_transient( 'sent_grandma_money' ) ) )
{
internetofThings( "send grandma","$1" );
set_transient( 'sent_grandma_money', 'yes', DAY_IN_SECONDS );
}
}
या यहां तक कि wp-cron का उपयोग करें।
ध्यान दें कि आपके पास अजाक्स कॉल हो सकते हैं। भी।
उन लोगों के लिए जाँच करने के तरीके हैं, उदाहरण के लिए DOING_AJAX
पुनर्निर्देशन भी हो सकता है, जो प्रवाह को बाधित कर सकता है।
तब हम बैकएंड को केवल प्रतिबंधित करना चाहते हैं, is_admin()
या नहीं ! is_admin()
:।
प्रश्न 3
क्या यह कुछ है जो प्लगइन डेवलपर्स के बारे में चिंता करता है?
हाँ यह महत्वपूर्ण है।
अगर हम अपनी दादी को बहुत खुश करना चाहते हैं तो हम करेंगे:
add_action( 'all','send_money_to_grandma' );
लेकिन यह प्रदर्शन के लिए बहुत बुरा होगा ... और हमारा बटुआ ;-)