Ich habe dies umformuliert, um mehr Sinn zu machen.
Ok, ich habe ein Plugin, das einen Remote-Dienst verwendet, der nach Updates sucht, ähnlich wie Standard-WordPress-Plugins. In diesem Fall überprüft es nur eine XML-Datei.
Ich möchte eine solche Menüblase anzeigen, wenn ein Update verfügbar ist.
Es kann nur eine "1" oder einen Text wie "alert" anzeigen, es spielt keine Rolle.
Da mein Plugin eine Optionsseite verwendet (mit add_options_page
), werden die Plugin-Einstellungen im Standard-Untermenü "Einstellungen" angezeigt.
Ich denke, ich muss das folgende CSS hinzufügen, damit die Blase angezeigt wird.
<span class='update-plugins count-1' title='title'><span class='update-count'>1</span></span>
und binden in die globale $submenu
. Das Problem ist, dass ich keinen fest codierten Array-Wert für das Menü verwenden kann, da jede Site unterschiedliche Werte hat.
Also kann ich nicht verwenden $submenu[80][10] .= <span class='update-plugins count-1' title='title'><span class='update-count'>1</span></span>
Wie finde ich den Wert meines Plugins-Untermenüs? Muss ich das Array durchlaufen und die Zeichenfolgenwerte abgleichen?
Auch wenn ich die Werte fest codiert habe, konnte ich die Blase nicht zum Anzeigen bringen.
//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>");
}
}
und so var_dump($submenu);
sieht ein aus,
["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"
...
}
Antworten:
Ich würde das tun, wenn Sie anrufen
add_options_page()
, nicht später. Es ist immer besser, dies mit der unterstützten API zu tun, als mit den internen Strukturen zu spielen.Der Plugin-Updater überprüft regelmäßig den Plugin-Status und speichert das Ergebnis in einem Übergang . Dies bedeutet, dass dieser zwischengespeicherte Status nur beim Erstellen des Menüs gelesen wird und nicht bei jedem Laden der Seite die vollständige Überprüfung durchgeführt wird. Sie können etwas Ähnliches tun:
Wenn Sie die eigentliche Warnprüfung durchführen, speichern Sie die Ergebnisse im Transienten, damit sie später gelesen werden können:
Beachten Sie, dass ich nichts Besonderes mache, wenn keine Warnungen vorliegen. Die Blase wird nicht angezeigt, weil sie die Klasse erhält
count-0
, diedisplay: none
in der CSS enthalten ist .quelle