Aggiungere il fumetto di notifica di aggiornamento alla voce di menu dell'amministratore?


9

Ho riformulato questo per avere più senso.

Ok, ho un plugin che utilizza un servizio remoto che controlla gli aggiornamenti, proprio come i plugin WordPress predefiniti, in questo caso controlla solo un file XML.

Voglio mostrare una bolla di menu come questa inserisci qui la descrizione dell'immaginequando è disponibile un aggiornamento.

Può mostrare solo un "1" o un testo come "avviso", non importa.

Poiché il mio plug-in utilizza una pagina di opzioni (utilizzando add_options_page), le impostazioni del plug-in vengono visualizzate nel sottomenu "Impostazioni" predefinito.

Penso di dover aggiungere il seguente CSS per visualizzare la bolla,

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

e legare al globale $submenu. Il problema è che non posso usare un valore di array hardcoded per il menu poiché ogni sito avrà valori diversi.

Quindi non posso usare $submenu[80][10] .= <span class='update-plugins count-1' title='title'><span class='update-count'>1</span></span>

Come posso trovare il valore del mio sottomenu plug-in, devo passare in rassegna l'array e abbinare i valori di stringa?

Inoltre, anche quando ho codificato i valori, non sono riuscito a far apparire la bolla.

//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>");  

       }
  }

ed ecco var_dump($submenu);come appare,

["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"

     ...

      }

Qual è la ragione di ciò? Che cosa esattamente vuoi fare?
— Ján Bočínec,

1
@Wyck: stai parlando del fumetto che indica il numero di aggiornamenti disponibili e commenti non moderati ? Forse dovresti aggiornare la tua domanda per includere uno screenshot, per renderlo più chiaro.
— Jan Fabry,

Sì, esattamente, aggiungerò lo schermo.
— Wyck,

Per cosa, esattamente, vuoi indicare gli aggiornamenti disponibili? per temi e plugin ospitati nel repository WPORG, questa notifica di aggiornamento viene gestita automaticamente.
— Chip Bennett,

È una funzione personalizzata per un plug-in, riceve aggiornamenti remoti da un altro servizio e desidero utilizzare la stessa funzionalità di notifica degli aggiornamenti.
— Wyck,

Risposte:


8

Lo farei quando chiami add_options_page(), non più tardi. È sempre meglio farlo con l'API supportata invece di giocare con le strutture interne.

L'aggiornamento del plugin controlla periodicamente lo stato del plugin e quindi salva il risultato in un transitorio . Ciò significa che legge questo stato memorizzato nella cache solo quando viene creato il menu, non esegue il controllo completo su ogni caricamento della pagina. Puoi fare qualcosa di simile:

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' );
}

Voce di menu con bolla di notifica

Quando si esegue l'effettivo controllo degli avvisi, si salvano i risultati nel transitorio in modo che possano essere letti in seguito:

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

Nota che non faccio nulla di speciale quando non ci sono avvisi. La bolla non viene visualizzata perché ottiene la classe count-0, che ha display: nonenel CSS .


1
Perfetto! Grazie, questo è un modo molto migliore per farlo.
— Wyck,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.