Przeredagowałem to, aby było bardziej sensowne.
Ok, mam wtyczkę, która korzysta ze zdalnej usługi, która sprawdza dostępność aktualizacji, podobnie jak domyślne wtyczki WordPress, w tym przypadku po prostu sprawdza plik XML.
Chcę pokazać taką bańkę menu, gdy dostępna jest aktualizacja.
Może wyświetlać tylko „1” lub tekst przypominający „alert”, nie ma to znaczenia.
Ponieważ moja wtyczka korzysta ze strony opcji (za pomocą add_options_page
), ustawienia wtyczki są wyświetlane w domyślnym podmenu „Ustawienia”.
Myślę, że muszę dodać następujący CSS, aby pojawił się dymek,
<span class='update-plugins count-1' title='title'><span class='update-count'>1</span></span>
i związać się z globalnym $submenu
. Problem polega na tym, że nie mogę użyć zakodowanej wartości tablicy dla menu, ponieważ każda witryna będzie miała inne wartości.
Więc nie mogę użyć $submenu[80][10] .= <span class='update-plugins count-1' title='title'><span class='update-count'>1</span></span>
Jak znaleźć wartość podmenu wtyczek, czy muszę przeglądać tablicę i dopasowywać wartości ciągu?
Nawet gdy zakodowałem na stałe wartości, nie mogłem wyświetlić bańki.
//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>");
}
}
a oto jak var_dump($submenu);
wygląda
["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"
...
}
Odpowiedzi:
Zrobiłbym to, kiedy zadzwonisz
add_options_page()
, nie później. Zawsze lepiej jest to zrobić z obsługiwanym interfejsem API zamiast bawić się strukturami wewnętrznymi.Aktualizator wtyczek okresowo sprawdza status wtyczki, a następnie zapisuje wynik w stanie przejściowym . Oznacza to, że odczytuje ten status z pamięci podręcznej tylko podczas tworzenia menu, nie wykonuje pełnego sprawdzenia przy każdym ładowaniu strony. Możesz zrobić coś podobnego:
Kiedy wykonujesz rzeczywiste sprawdzenie ostrzeżenia, zapisujesz wyniki w stanie przejściowym, aby można je było później odczytać:
Zauważ, że nie robię nic specjalnego, gdy nie ma ostrzeżeń. Bańka nie jest wyświetlana, ponieważ dostaje klasę
count-0
, która madisplay: none
w css .źródło