Adiciona o balão de notificação de atualização ao item de menu admin?

8

Reescrevi isto para fazer mais sentido.

Ok, eu tenho um plug-in que usa um serviço remoto que verifica se há atualizações, assim como os plug-ins padrão do WordPress, nesse caso ele apenas verifica um arquivo XML.

Eu quero mostrar uma bolha de menu como esta quandohouverumaatualizaçãodisponível.

Elepodemostrarapenasum"1" ou um texto como "alerta", não importa.

Como meu plug-in usa uma página de opções (usando add_options_page ), as configurações do plug-in aparecem no submenu padrão "Configurações".

Acho que preciso adicionar o seguinte CSS para que a bolha apareça,

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

e amarre no global $submenu . O problema é que não posso usar um valor de matriz codificado para o menu, pois cada site terá valores diferentes.

Portanto, não posso usar $submenu[80][10] .= <span class='update-plugins count-1' title='title'><span class='update-count'>1</span></span>

Como posso encontrar meu valor de submenu de plug-ins? Tenho que percorrer o array e corresponder aos valores de string?

Além disso, mesmo quando codifiquei os valores, não consegui mostrar a bolha.

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

       }
  }

e aqui está o que parece um 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"

     ...

      }
    
por Wyck 25.04.2011 / 20:23

1 resposta

7

Eu faria isso quando você chamasse add_options_page() , não mais tarde. É sempre melhor fazer isso com a API suportada, em vez de brincar com as estruturas internas.

O atualizador do plug-in verifica periodicamente o status do plug-in e salva o resultado em um transiente . Isso significa que só lê este status em cache quando o menu é criado, ele não faz a verificação completa em cada carregamento de página. Você pode fazer algo parecido:

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

Quandovocêfazaverificaçãodeavisoreal,salvaosresultadosnotransitórioparaquepossamserlidosposteriormente:

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

Observequenãofaçonadaespecialquandonãoháavisos.Abolhanãoéexibidaporquerecebeaclassecount-0, que possui display: none no css .

    
por Jan Fabry 27.04.2011 / 10:17