Hindi (हिंदी) translation by Ashish Rampal (you can also view the original English article)
परसिस्टेड WordPress एडमिन नोटिस पर हमारी श्रृंखला में आपका स्वागत है। जब हम पेज पर दिखाई देते हैं तो हम अब हमारी एडमिन सूचना कार्यक्षमता और नियंत्रण को बढ़ाने में सक्षम होने के लिए एक अच्छी स्थिति में हैं।
इसके बाद, हम लगातार एडमिन नोटिस पर आगे बढ़ेंगे और देखेंगे कि आप यह सुनिश्चित कर सकते हैं कि उन्हें इस तरह से डिसमिस कर दिया गया है कि जब वे एडमिन पेज पुनः लोड होते हैं तो वे फिर से प्रकट नहीं होते हैं।
यह विशेष रूप से महत्वपूर्ण है क्योंकि प्लगइन और थीम में लागू कस्टम एडमिन नोटिस केवल वास्तव में उपयोगी होते हैं जब आप उन्हें स्थायी रूप से डिसमिस कर सकते हैं। यह is-dismissible
CSS क्लास जोड़ने के लिए पर्याप्त नहीं है।
जब एडमिन नोटिस दिखाई देते हैं तो नियंत्रित करना
अब तक, पेज लोड होने के तुरंत बाद सभी एडमिन नोटिस डिस्प्ले किए गए हैं। कई बार ऐसा असुविधाजनक हो सकता है और आप चाहते हैं कि एक निश्चित ईवेंट ट्रिगर किए जाने के बाद एडमिन नोटिस डिस्प्ले हो।
अगर हम पहले से बनाए गए प्लगइन ऑप्शन पेज पर एक कस्टम एडमिन नोटिस डिस्प्ले करना चाहते थे, तो इसके बारे में क्या, लेकिन केवल Save Changes बटन क्लिक करने के बाद ही?
हम पहले से ही दो भाग से जानते हैं कि प्लगइन ऑप्शन पेज पर एडमिन नोटिस को कैसे प्रतिबंधित करें। चलो पता लगाएं कि प्लगइन ऑप्शन सेव किये जाने के बाद हम इसे कैसे दिखाना शुरू कर सकते हैं।
plugin_admin_notice
के लिए add_action
फ़ंक्शन कॉल को कमेंट करके शुरू करें। फिर, निम्नानुसार init
में चौथा add_action
कॉल जोड़ें:
add_action( 'admin_notices', array( $this, 'conditional_plugin_admin_notice' ) );
जब भी प्लगइन ऑप्शन सेव किये जाते हैं, तो सुपर ग्लोबल $_GET
ऐरे वेरिएबल में true
का एक settings-updated
किया गया वैल्यू जोड़ा जाता है। हम यह निर्धारित करने के लिए इसका उपयोग कर सकते हैं कि हमें हमारी एडमिन सूचना डिस्प्ले करने की आवश्यकता है या नहीं।
Gwyer_Admin_Notices
को एक नई conditional_plugin_admin_notice
मेथड जोड़ें जो स्क्रीन पर $_GET
के वैल्यू को आउटपुट करता है।
/** * Output an admin notice on the plugin options page when settings have been saved. */ public function conditional_plugin_admin_notice() { echo "<pre>"; print_r($_GET); echo "</pre>"; }
जब प्लगइन ऑप्शन पेज सामान्य रूप से लोड होता है तो हमें settings-updated के लिए वैल्यू सेट नहीं दिखाई देता है।



अब Enter some text में कुछ टेक्स्ट एंटर करें और Save Changes पर क्लिक करें। इस बार, हम settings-updated
को true
पर सेट देखते हैं, जिसे हम अच्छे उपयोग में डाल सकते हैं।



conditional_plugin_admin_notice
को इसके साथ बदलें:
/** * Output an admin notice on the plugin options page when settings have been saved. */ public function conditional_plugin_admin_notice() { $whitelist_admin_pages = array( 'settings_page_admin-notices/plugin-options' ); $admin_page = get_current_screen(); $current_user = wp_get_current_user(); if( in_array( $admin_page->base, $whitelist_admin_pages ) && isset( $_GET[ 'settings-updated' ] ) && $_GET[ 'settings-updated' ] ): ?> <div class="notice notice-success is-dismissible"><p>Plugin options just saved. <strong><?php echo $current_user->display_name; ?></strong>, you're just so awesome!</p></div> <?php endif; }
अब तक, यह कोड आपको परिचित लग रहा होना चाहिए। हालांकि, कुछ नई विशेषताएं जोड़ दी गई हैं। सबसे पहले, कंडीशनल एक्सप्रेशन को settings-updated
की उपस्थिति के लिए परीक्षण करने के लिए बढ़ा दिया गया है। अब, एडमिन नोटिस केवल तभी डिस्प्ले होगा जब हम प्लगइन ऑप्शन पेज पर हों और यदि settings-updated
true
पर सेट हो।
साथ ही, मौजूदा यूजर डिस्प्ले नाम को एडमिन नोटिस को थोड़ा और व्यक्तिगत बनाने के लिए आउटपुट किया जाता है।



wp_get_current_user()
फ़ंक्शन वर्तमान में लॉग-इन किए गए यूजर के बारे में जानकारी देता है। यह ऑब्जेक्ट $current_user
में संग्रहीत है और इसमें यूजर ईमेल, आईडी, पहला नाम, अंतिम नाम, और डिस्प्ले नाम जैसे विवरण शामिल हैं, जो कि हम जिस विशेष प्रॉपर्टी में रुचि रखते हैं वह है।
आखिरकार, थोड़ी अतिरिक्त पॉलिश के लिए, हमने डिफॉल्ट एडमिन नोटिस को डिस्प्ले करने से रोका है ताकि हमारा कस्टम एक यूजर के लिए केवल एक ही दिखाई दे। इसे प्राप्त करने के लिए, हमने अवांछित एडमिन नोटिस को छिपाने के लिए आउटपुट CSS में conditional_plugin_admin_notice()
को कोड की एक लाइन भी जोड़ा।
echo "<style>#setting-error-settings_updated { display: none; }</style>";
अंतिम परिणाम जब प्लगइन ऑप्शन सेव किये जाते हैं नीचे दिखाया गया है।



हालांकि यह प्रदर्शन उद्देश्यों के लिए ठीक काम करता है, एक बेहतर (और क्लीनर) दृष्टिकोण स्टाइल को एक अलग स्टाइल शीट में जोड़ने और केवल प्लगइन ऑप्शन पेज पर इसे संलग्न करने के लिए होगा।
हमारे कस्टम एडमिन नोटिस को कई तरीकों से आगे बढ़ाया जा सकता है। प्लगइन ऑप्शन सेव किये जाने पर हर बार यूजर की जानकारी के साथ वर्तमान दिनांक/समय को संग्रहीत करने वाले लॉग को बनाए रखने की संभावना हो सकती है।
या एडमिन नोटिस को यह दिखाने के लिए कि उस दिन, सप्ताह, महीने इत्यादि कितनी बार प्लगइन ऑप्शन सेव किये गए हैं? मुझे यकीन है कि आप और भी उदाहरणों के बारे में सोच सकते हैं!
प्रभावी एडमिन नोटिस को प्रभावी ढंग से डिसमिस करना
अब हमारे हाथों को गंदे करने और अधिक गहन कोड में खोदने का समय है क्योंकि हम लगातार एडमिन नोटिस को डिसमिस करने के लिए अपना ध्यान बदलते हैं। अब तक, एकमात्र तरीका हमने देखा है कि यह कैसे करना है। हमारे एडमिन नोटिस div कंटेनर में .is-dismissible
CSS क्लास को जोड़ना है। यह वर्तमान पेज के लिए एडमिन नोटिस को डिसमिस कर देता है, लेकिन अभ्यास में इसका अधिक उपयोग नहीं होता है क्योंकि जब कोई एडमिन पेज पुनः लोड होता है तो यह फिर से दिखाई देता है।
तो हम इसे कैसे ठीक कर सकते हैं? हम सदैव के लिए एडमिन नोटिस को डिसमिस करने के कई अलग-अलग तरीकों को देखेंगे, जिनमें निम्न शामिल हैं:
- वन-ऑफ एडमिन नोटिस जो एक व्यू के बाद गायब हो जाता है।
- एक एडमिन नोटिस काउंटर जो कुछ निश्चित व्यूज के बाद गायब हो जाता है।
- स्टिकी एडमिन नोटिस जो पेज रीफ्रेश पर डिसमिस कर दिया जाता है।
- कस्टम एक्शन डिस्मिस्सल (विशिष्ट एक्शन के बाद हटाए गए एडमिन नोटिस को पूरा कर लिया जाता है)।
इन उदाहरणों में से प्रत्येक को लागू करने से पहले, सुनिश्चित करें कि Gwyer_Admin_Notices::init()
में सभी add_action()
कॉलों पर कमेंट किया गया है। फिर admin_notices
प्लगइन फ़ोल्डर में एक नई dismissible-admin-notices.php
फ़ाइल जोड़ें। इस नई फाइल को खोलें और एक नई क्लास परिभाषा जोड़ें:
<?php class Gwyer_Dismissible_Admin_Notices { /** * Register hooks. */ public function init() { // add_action() calls will go here... } } $gwyer_dismissible_admin_notices = new Gwyer_Dismissible_Admin_Notices(); $gwyer_dismissible_admin_notices->init();
admin_notices.php
में, हमारी नई क्लास आयात करने के लिए एक और require_once()
कॉल जोड़ें:
require_once(dirname(__FILE__) . '/dismissible-admin-notices.php' );
Gwyer_Dismissible_Admin_Notices
क्लास में निरंतर एडमिन नोटिस को डिसमिस करने से संबंधित सभी कोड होंगे।
वन-ऑफ एडमिन नोटिस
पहले मेथड हम देखेंगे कि एक बार नोटिस कैसे डिस्प्ले करें ताकि यह पेज लोड पर फिर से दिखाई न दे। जब आप प्लगइन या थीम को एक्टिवटे कर चुके होते हैं तो यूजर को सूचित करने के लिए आप इस मेथड का उपयोग कर सकते हैं।
आइए हम अपने एडमिन नोटिस प्लगइन के लिए ऐसा करते हैं। हम प्लगइन एक्टिवेशन पर एक WordPress transient ऑप्शन रजिस्टर करके शुरू करेंगे जो लगभग तुरंत समाप्त होने के लिए सेट है।
Gwyer_Dismissible_Admin_Notices
क्लास में, register_activation_hook()
पर एक कॉल जोड़ें:
register_activation_hook( plugin_dir_path( __FILE__ ) . 'admin-notices.php', array( $this, 'set_admin_notice_transient' ) );
register_activation_hook()
फ़ंक्शन के लिए आपको मुख्य प्लगइन फ़ाइल के पाथ को निर्दिष्ट करने की आवश्यकता होती है, लेकिन वर्तमान में हम dismissible-admin-notices.php
में हैं। इसलिए हम केवल PHP के मैजिक कांस्टेंट __FILE__
का उपयोग नहीं कर सकते हैं जिसे हमने पहले उपयोग किया था क्योंकि यह हमेशा वर्तमान PHP फ़ाइल को इंगित करता है।
इसके बजाए, हमें plug_dir_path(__FILE__) . 'admin-notices.php'
का उपयोग करके मुख्य प्लगइन फ़ाइल का पाथ बनाना होगा।
जब एडमिन नोटिस प्लगइन एक्टिवेट होता है, तो यह set_admin_notice_transient
क्लास मेथड में जोड़ा गया कोड चलाएगा, जिसे हम आगे परिभाषित करेंगे।
public function set_admin_notice_transient() { set_transient( 'admin-notice-transient', true, 5 ); }
यह मेथड true
के वैल्यू के साथ 'admin-notice-transient'
नामक एक नया ट्रांसिएंट बनाता है, और पांच सेकंड के बाद समाप्त होने के लिए सेट है।
अगर हम सही एडमिन पेज पर हैं और हमारे ट्रांसिएंट अभी भी मौजूद हैं तो कण्डीशनली एक एडमिन नोटिस डिस्प्ले करके इस ट्रांसिएंट का उपयोग करें।
Init()
में एक नया add_action()
कॉल जोड़ें।
add_action( 'admin_notices', array( &$this, 'display_admin_notice' ) );
फिर, एक नई क्लास मेथड के रूप में display_admin_notice
कॉलबैक फ़ंक्शन जोड़ें:
public function display_admin_notice() { $current_user = wp_get_current_user(); $whitelist_admin_pages = array( 'plugins' ); $admin_page = get_current_screen(); if( in_array( $admin_page->base, $whitelist_admin_pages ) && get_transient( 'admin-notice-transient' ) ) : ?> <div class="updated notice"> <p>The <strong>Admin Notices</strong> plugin was just activated. Thanks for your support <?php echo $current_user->display_name; ?>!</p> </div> <?php delete_transient( 'admin-notice-transient' ); endif; }
इसी प्रकार पिछले उदाहरणों के लिए, एडमिन नोटिस केवल तभी डिस्प्ले होता है जब हम किसी विशिष्ट पेज पर हों- इस मामले में, मुख्य एडमिन प्लगइन्स पेज। लेकिन हमारे पास एक अतिरिक्त कंडीशन है कि 'admin-notice-transient'
भी मौजूद होना चाहिए, अन्यथा एडमिन नोटिस डिस्प्ले नहीं होगा।
एडमिन नोटिस आउटपुट होने के बाद, ट्रांसिएंट तुरंत हटा दिया जाता है, भले ही हमने शुरुआत में इसे केवल पांच सेकंड के बाद समाप्त करने के लिए सेट किया हो। यह सिर्फ यह सुनिश्चित करता है कि यह फिर से नहीं दिखाया जाएगा। यह संभवतः तब हो सकता है जब यूजर ने प्लगइन्स पेज को बहुत तेज़ी से रीफ्रेश करने का प्रयास किया हो। लेकिन जानबूझकर ट्रांसिएंट को हटाकर, हम निश्चित हो सकते हैं कि यह कभी भी कोई मामला नहीं होगा।
कोड को जांचने के लिए हमने अभी जोड़ा है, मुख्य प्लगइन्स पेज पर जाएं और निष्क्रिय करें, फिर एडमिन नोटिस प्लगइन को फिर से एक्टिवेट करें।



यहां key 'admin-notice-transient'
ट्रांसिएंट सेटिंग है। इसके बिना, प्रत्येक बार प्लगइन्स पेज लोड होने पर एडमिन नोटिस दिखाई देगा (प्लगइन एक्टिवेट होने के बाद), जो हम नहीं चाहते हैं।
एडमिन नोटिस काउंटर
इसके बाद एक एडमिन नोटिस है जो केवल एक निश्चित संख्या डिस्प्ले करेगा, जिसके बाद यह अब दिखाई नहीं देगा। इसके अलावा, इस बार इसके आसपास किसी भी विशेष एडमिन पेज तक ही सीमित नहीं होगा।
शुरू करने से पहले, Gwyer_Dismissible_Admin_Notices
क्लास में, register_activation_hook()
और add_action()
फ़ंक्शन कॉल पर कमेंट करें। अब आइए बुनियादी एडमिन नोटिस सेट करें जिसे हम जल्द ही फंक्शनलिटी बढ़ाएंगे।
Init()
में एक नया add_action()
कॉल जोड़ें
add_action( 'admin_notices', array( &$this, 'display_admin_notice_counter' ) );
और फिर कॉलबैक फ़ंक्शन को डिस्प्ले करें display_admin_notice_counter()
:
public function display_admin_notice_counter() { ?> <div class="updated notice"> <p>Counter admin notice.</p> </div> <?php }
यह एक स्टैण्डर्ड एडमिन नोटिस डिस्प्ले करेगा जो प्रत्येक WordPress एडमिन पेज पर दिखाई देगा।



आइए सोचें कि हमें क्या करना है। हमारे एडमिन नोटिस को एक निश्चित संख्या डिस्प्ले करना चाहिए, और हर बार जब ऐसा लगता है कि एक आंतरिक काउंटर एक से बढ़ता है। एक बार काउंटर सीमा तक पहुंचने के बाद, एडमिन नोटिस फिर से प्रकट नहीं होना चाहिए।
हम चाहते हैं कि एडमिन नोटिस किसी भी एडमिन पेज पर डिस्प्ले किया जाए और इसलिए काउंटर वैल्यू पेज लोड के बीच जारी रहना चाहिए। ऐसा करने का एक अच्छा तरीका काउंटर वैल्यू को स्टोर करने के लिए डेटाबेस ऑप्शन का उपयोग करना है।
काउंटर सीमा वैल्यू को स्टोर करने के लिए काउंटर क्लास प्रॉपर्टी जोड़ें:
public $counter_limit = 5;
यह शीघ्र ही प्रबंधित करने के लिए उपयोग किया जाएगा कि एडमिन नोटिस कितनी बार प्रकट होता है। display_admin_notice_counter()
के अंदर, कोड को निम्नानुसार अपडेट करें:
public function display_admin_notice_counter() { $counter = get_option( 'admin_notice_counter', 1 ); ?> <div class="notice notice-info"> <p>This admin notice has been displayed <?php echo $counter; ?> time(s).</p> </div> <?php update_option( 'admin_notice_counter', ++$counter ); }
एडमिन नोटिस डिस्प्ले होने से पहले, हम काउंटर ऑप्शन पुनर्प्राप्त कर रहे हैं, और डिफ़ॉल्ट वैल्यू रीटर्न किया गया है यदि यह अभी तक मौजूद नहीं है। एडमिन नोटिस प्रस्तुत करने के बाद, काउंटर ऑप्शन एक से बढ़ाया जाता है और अपडेट किया जाता है। यदि यह अस्तित्व में नहीं है तो वर्तमान वैल्यू को संग्रहीत करने के लिए एक नया ऑप्शन बनाया जाएगा।
हमने एक सूचना एडमिन नोटिस होने के लिए CSS क्लास को भी अपडेट किया है।
विभिन्न एडमिन पेजेज पर जाकर देखें और प्रत्येक बार काउंटर वृद्धि देखें।



++$counter
कोड पूर्व-इन्क्रीमेंट ऑपरेटर का एक उदाहरण है। यह डेटाबेस में सेव किये जाने से पहले $counter
के लिए एक वैल्यू जोड़ता है। अगर हम एक पोस्ट इन्क्रीमेंट ऑपरेटर (यानी $counter++
) का उपयोग करते हैं तो $counter
का मूल्य पहले स्टोर किया जाएगा और फिर बढ़ेगा, जो काम नहीं करेगा।
एडमिन नोटिस को कई बार डिस्प्ले होने से रोकने के लिए अब $counter_limit
को शामिल करें। इसे $counter
के लिए डिक्लेरेशन के नीचे display_admin_notice_counter()
में जोड़ें:
if( $counter > $this->counter_limit ) { return; }
अब, एडमिन नोटिस पांच बार डिस्प्ले होने के बाद, यह बाद के एडमिन पेजेज पर दिखाई नहीं देगा। हालांकि, यह अच्छा हो सकता है कि आखिरी बार एडमिन नोटिस दिखाई देने पर एक संदेश डिस्प्ले करने के लिए यूजर को पता है कि यह फिर से दिखाई नहीं देगा। कंडीशनल एक्सप्रेशन बढ़ाएं और एक अतिरिक्त संदेश आउटपुट करें:
public function display_admin_notice_counter() { $counter = get_option( 'admin_notice_counter', 1 ); if( $counter > $this->counter_limit ) { return; } else if( $counter == $this->counter_limit ) { $extra_message = " It's time to say goodbye now."; } ?> <div class="notice notice-info"> <p>This admin notice has been displayed <?php echo $counter; ?> time(s).<?php echo $extra_message; ?></p> </div> <?php update_option( 'admin_notice_counter', ++$counter ); }
हालांकि, अगर आप काउंटर सीमा से पहले ही चले गए हैं तो आपको संदेश नहीं दिखाई देगा। आप $counter_limit
वेरिएबल को बढ़ाकर अस्थायी रूप से इसे हल कर सकते हैं।



परीक्षण उद्देश्यों के लिए, काउंटर सीमा को रीसेट करने में सक्षम होना बेहतर होगा। यदि आप डेटाबेस को एडिट करने के बारे में जानते हैं, तो आप सीधे ऑप्शन में जा सकते हैं और बदल सकते हैं, लेकिन यह कई बार करने के लिए कठिन हो सकता है। तो चलिए अपनी खुद के रीसेट फीचर को लागू करें।
सबसे पहले, $counter_limit
को वापस 5
में बदलें और एक नई क्लास प्रॉपर्टी जोड़ें:
public $counter_reset = false;
फिर, init()
के अंदर रेप्लस करें
add_action( 'admin_notices', array( &$this, 'display_admin_notice_counter' ) );
इसके साथ
$this->reset_counter_check();
रीसेट फ़ंक्शन या तो हमारे काउंटर एडमिन नोटिस को दिखाएं या admin_notice_counter
डेटाबेस ऑप्शन को हटाएं और इसके बजाय एक वार्निंग एडमिन नोटिस डिस्प्ले करें।
public function reset_counter_check() { if( !$this->counter_reset ) { add_action( 'admin_notices', array( &$this, 'display_admin_notice_counter' ) ); } else { delete_option( 'admin_notice_counter' ); ?> <div class="notice notice-warning"> <p>Admin notice counter has been reset! Change <code>$counter_reset</code> to <code>false</code> to start the admin notice counter again.</p> </div> <?php } }
नई रीसेट फीचर का उपयोग करने के लिए, बस $counter_reset
को true
में बदलें और किसी भी एडमिन पेज को लोड करें।



फिर इसे फिर से false
में बदलें।



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