問題描述

我有 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 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。