問題描述
我有 re-worded 這個更有意義。
好的,我有一個外掛,使用一個檢查更新的遠端服務,很像預設的 WordPress 外掛,在這種情況下,它只是檢查一個 XML 檔案。
當有更新可用時,我想顯示一個這樣的選單。
它只能顯示一個”1″ 或像”alert” 這樣的文字,沒關係。
由於我的外掛使用選項頁面 (使用 add_options_page) 外掛設定顯示在預設的”Settings” 子選單下。
我想我需要新增以下 CSS 來使泡沫出現,
<span class='update-plugins count-1' title='title'><span class='update-count'>1</span></span>
並繫結到全球 $submenu 。問題是我不能使用選單中的 hard-coded 陣列值,因為每個站點都有不同的值。
所以我不能使用 $submenu[80][10] .= <span class='update-plugins count-1' title='title'><span class='update-count'>1</span></span>
我如何找到我的外掛子選單值,我必須遍歷陣列並匹配字串值嗎?
甚至當我 hard-coded 的價值觀我無法得到泡沫出現。
//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 而不是使用內部結構來執行此操作總是更好。
外掛更新程式會定期檢查外掛狀態,然後將結果儲存在一個暫時的狀態。這意味著當建立選單時,it only reads this cached status 不會對每一頁的載入進行全面檢查。你可以做類似的事情:
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' );
}
當您進行實際的警告檢查時,將結果儲存在瞬態中,以便稍後閱讀:
if ( ! empty( $matches ) ) {
set_transient( 'wpse15567_warnings', $matches );
}
請注意,當沒有警告時,我不做任何特別的事情。由於獲取了 count-0,它在 Css 中具有 display: none 類,所以無法顯示氣泡。
參考文獻
注:本文內容整合自 Google/Baidu/Bing 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。