Я переформулировал это, чтобы иметь больше смысла.
Хорошо, у меня есть плагин, который использует удаленный сервис, который проверяет наличие обновлений, так же, как плагины WordPress по умолчанию, в этом случае он просто проверяет файл XML.
Я хочу показать всплывающее меню, как это, когда доступно обновление.
Он может показывать только «1» или текст, как «предупреждение», это не имеет значения.
Поскольку мой плагин использует страницу настроек (используя add_options_page
), настройки плагина отображаются в подменю «Настройки» по умолчанию.
Я думаю, что мне нужно добавить следующий CSS, чтобы пузырь появился,
<span class='update-plugins count-1' title='title'><span class='update-count'>1</span></span>
и привязать к глобальному $submenu
. Проблема в том, что я не могу использовать жестко запрограммированное значение массива для меню, поскольку каждый сайт будет иметь разные значения.
Поэтому я не могу использовать $submenu[80][10] .= <span class='update-plugins count-1' title='title'><span class='update-count'>1</span></span>
Как мне найти значение подменю моих плагинов, нужно ли циклически проходить по массиву и сопоставлять строковые значения?
Кроме того, даже когда я жестко закодировал значения, я не мог заставить пузырь появляться.
//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>");
}
}
и вот как 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"
...
}
Ответы:
Я бы сделал это, когда ты позвонишь
add_options_page()
, а не позже. Всегда лучше делать это с поддерживаемым API, а не играть с внутренними структурами.Средство обновления плагина периодически проверяет состояние плагина, а затем сохраняет результат в переходном процессе . Это означает, что он читает это кэшированное состояние только при создании меню, он не выполняет полную проверку при каждой загрузке страницы. Вы можете сделать что-то подобное:
Когда вы делаете фактическую проверку предупреждений, вы сохраняете результаты в переходном процессе, чтобы их можно было прочитать позже:
Обратите внимание, что я не делаю ничего особенного, когда нет предупреждений. Пузырь не отображается, потому что он получает класс
count-0
, который естьdisplay: none
в CSS .источник