问题描述

我有 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 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。