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.