Eu reformulei isso 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, neste caso, apenas verifica um arquivo XML.
Quero mostrar um balão de menu como este quando uma atualização estiver disponível.
Pode mostrar apenas um "1" ou 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 amarrar no global $submenu
. O problema é que não posso usar um valor de matriz codificado para o menu, pois cada site terá valores diferentes.
Então eu 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 o valor do submenu de meus plugins, preciso percorrer a matriz e corresponder aos valores da string?
Além disso, mesmo quando codifiquei os valores, não consegui que a bolha aparecesse.
//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 var_dump($submenu);
parece,
["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"
...
}
Respostas:
Eu faria isso quando você ligar
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 transitório . Isso significa que ele só lê esse status em cache quando o menu é criado, não faz a verificação completa em cada carregamento de página. Você pode fazer algo semelhante:
Ao fazer a verificação de aviso real, você salva os resultados no transitório para que possam ser lidos mais tarde:
Observe que eu não faço nada de especial quando não há avisos. A bolha não são exibidas porque ele recebe a classe
count-0
, que temdisplay: none
no css .fonte