मेनू आइटम को व्यवस्थापक के लिए अद्यतन अधिसूचना बुलबुला जोड़ें?


9

मैंने इसे अधिक अर्थ देने के लिए फिर से शब्द दिया है।

ठीक है, मेरे पास एक प्लगइन है जो एक दूरस्थ सेवा का उपयोग करता है जो अपडेट के लिए जाँच करता है, डिफ़ॉल्ट वर्डप्रेस प्लगइन्स की तरह, इस मामले में यह सिर्फ एक एक्सएमएल फ़ाइल की जांच करता है।

मैं इस तरह से एक मेनू बुलबुला दिखाना चाहता हूं यहां छवि विवरण दर्ज करेंजब कोई अपडेट उपलब्ध होता है।

यह सिर्फ "1" या "अलर्ट" जैसे पाठ दिखा सकता है, इससे कोई फर्क नहीं पड़ता।

चूंकि मेरा प्लगइन एक विकल्प पृष्ठ का उपयोग करता है (उपयोग करते हुए add_options_page) प्लगइन सेटिंग्स डिफ़ॉल्ट "सेटिंग्स" सबमेनू के तहत दिखाई देती हैं।

मुझे लगता है कि बुलबुला दिखाने के लिए मुझे निम्नलिखित सीएसएस जोड़ने की जरूरत है,

<span class='update-plugins count-1' title='title'><span class='update-count'>1</span></span>

और वैश्विक में टाई $submenu। समस्या यह है कि मैं मेनू के लिए हार्ड-कोडित सरणी मान का उपयोग नहीं कर सकता क्योंकि प्रत्येक साइट में अलग-अलग मान होंगे।

इसलिए मैं उपयोग नहीं कर सकता $submenu[80][10] .= <span class='update-plugins count-1' title='title'><span class='update-count'>1</span></span>

मैं अपने प्लगइन्स सबमेनू मान कैसे पा सकता हूं, क्या मुझे सरणी के माध्यम से लूप करना है और स्ट्रिंग मानों से मेल खाना है?

इसके अलावा जब मैंने हार्ड-कोड किया, तो मुझे दिखाने के लिए बुलबुला नहीं मिला।

//adding plugin to menu
add_action('admin_menu', 'sec_plugin_checker');

function sec_plugin_checker() {
  add_options_page(' Plugin Checker', 'Plugin Check', 'activate_plugins', 
  'sec_plugin_check', 'sec_checker');


// the conditional where I want the bubble to appear

if (!empty($matches)){ 
    echo "Match found !<br />";

    global $submenu;
    foreach( $submenu as $item ) {

    $item[41][20] = sprintf( __( 'Updates %s', 'sec_plugin_checker' ),  
                "<span class='update-plugins count-1' title='title'>
                 <span class='update-count'>1</span></span>");  

       }
  }

और यहाँ एक var_dump($submenu);जैसा दिखता है,

["options-general.php"]=>
array(9){
...

[41]=>
    array(4) {
      [0]=>
      string(20) "Plugin Check"
      [1]=>
      string(16) "activate_plugins"
      [2]=>
      string(21) "sec_plugin_check"
      [3]=>
      string(23) " Plugin Checker"

     ...

      }

इसका कारण क्या है? वास्तव में आप क्या करना चाहते हैं?
दिसंबर को JAN Bočínec

1
@Yck: आप उस बुलबुले के बारे में बात कर रहे हैं जो उपलब्ध अपडेट और असम्बद्ध टिप्पणियों की संख्या को इंगित करता है ? हो सकता है कि आपको स्क्रीनशॉट को शामिल करने के लिए अपने प्रश्न को अपडेट करना चाहिए, ताकि यह अधिक स्पष्ट हो सके।
Jan Fabry

हां बिल्कुल, मैं स्क्रीन जोड़ दूंगा।
व्येक

क्या, वास्तव में, क्या आप उपलब्ध अपडेट इंगित करना चाहते हैं? WPORG रिपॉजिटरी द्वारा होस्ट किए गए थीम और प्लगइन्स के लिए, यह अपडेट अधिसूचना स्वचालित रूप से नियंत्रित की जाती है।
चिप बेनेट

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

जवाबों:


8

मैं ऐसा तब करूंगा जब आप कॉल करेंगे add_options_page(), बाद में नहीं। आंतरिक संरचनाओं के साथ खेलने के बजाय समर्थित एपीआई के साथ ऐसा करना हमेशा बेहतर होता है।

प्लगइन updater समय-समय पर प्लगइन स्थिति की जाँच करता है और फिर एक क्षणिक में परिणाम बचाता है । इसका मतलब यह है कि यह केवल इस कैश्ड स्टेटस को पढ़ता है जब मेनू बनाया जाता है, यह हर पेज लोड पर पूरी जांच नहीं करता है। आप कुछ ऐसा ही कर सकते हैं:

add_action( 'admin_menu', 'wpse15567_admin_menu' );
function wpse15567_admin_menu()
{
    $warnings = get_transient( 'wpse15567_warnings' );
    $warning_count = count( $warnings );
    $warning_title = esc_attr( sprintf( '%d plugin warnings', $warning_count ) );

    $menu_label = sprintf( __( 'Plugin Checker %s' ), "<span class='update-plugins count-$warning_count' title='$warning_title'><span class='update-count'>" . number_format_i18n($warning_count) . "</span></span>" );

    add_options_page( 'Plugin Check', $menu_label, 'activate_plugins', 'sec_plugin_check', 'sec_checker' );
}

अधिसूचना बुलबुला के साथ मेनू आइटम

जब आप वास्तविक चेतावनी जांच करते हैं, तो आप परिणामों को क्षणिक में सहेजते हैं ताकि इसे बाद में पढ़ा जा सके:

if ( ! empty( $matches ) ) {
    set_transient( 'wpse15567_warnings', $matches );
}

ध्यान दें कि जब कोई चेतावनी नहीं होती है तो मैं कुछ विशेष नहीं करता हूं। बुलबुला प्रदर्शित नहीं होता है क्योंकि यह वर्ग को प्राप्त करता है count-0, जो display: noneसीएसएस में है


1
उत्तम! धन्यवाद यह ऐसा करने का एक बेहतर तरीका है।
व्येक
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.