将更新通知气泡添加到管理菜单项?


9

我已重新措辞,以使其更有意义。

好的,我有一个使用远程服务检查更新的插件,就像默认的WordPress插件一样,在这种情况下,它仅检查XML文件。

我想在在此处输入图片说明有可用更新时显示这样的菜单气泡。

它可以只显示“ 1”或类似“ alert”的文本,这无关紧要。

由于我的插件(使用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"

     ...

      }

这是什么原因呢?您到底想做什么?
扬Bočínec

1
@Wyck:您正在谈论的气泡指示可用更新和未经审核的注释的数量?也许您应该更新问题以包括屏幕截图,以使其更加清晰。
Jan Fabry

是的,我将添加屏幕。
Wyck

您究竟要指示什么可用更新?对于WPORG存储库托管的主题和插件,此更新通知将自动处理。
Chip Bennett

这是插件的自定义功能,它可以从其他服务获取远程更新,我想使用相同的更新通知功能。
Wyck

Answers:


8

我会在您致电时执行此操作,请add_options_page()稍后再进行。最好使用受支持的API来执行此操作,而不要使用内部结构。

插件更新程序会定期检查插件状态,然后将结果保存为瞬态。这意味着它仅在创建菜单时读取此缓存状态,而不会在每次页面加载时进行完整检查。您可以执行类似的操作:

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它有display: none在CSS


1
完善!谢谢,这是一种更好的方法。
Wyck
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.