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

时间:2011-04-25 作者:Wyck

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

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

我想显示这样的菜单气泡enter image description here 更新可用时。

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

因为我的插件使用选项页(使用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"

     ...

      }

2 个回复
最合适的回答,由SO网友:Jan Fabry 整理而成

你打电话的时候我会这么做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\' );
}
Menu item with notification bubble

执行实际警告检查时,将结果保存在瞬态中,以便稍后读取:

if ( ! empty( $matches ) ) {
    set_transient( \'wpse15567_warnings\', $matches );
}
请注意,在没有警告的情况下,我不会执行任何特殊操作。气泡不会显示,因为它获取了类count-0, which has display: none in the css.

SO网友:revive

或者类似的东西-根据需要进行调整:(1)为重力表单添加菜单项,2)显示数组中所有未读表单ID的计数。您可以使用特定表单的子菜单页扩展此功能,如果需要,还可以使用它们自己的计数。

add_action( \'admin_menu\', \'register_my_custom_menu_page\' );

// let\'s build the function
function register_my_custom_menu_page() {

    $search_criteria = array(
        \'status\'     => \'active\', // Active forms 
        \'field_filters\' => array( // which fields to search
            array(
                \'key\' => \'is_read\', \'value\' => false, // let\'s just get the count for entries that we haven\'t read yet.
            )
          )
        );

    // Add the form IDs to the array below, the parent menu will show ALL unread entries for these forms
    // NOTE: you can get counts for whatever you\'re wanting and change the value of $notification_count below accordingly. 
    $notification_count = GFAPI::count_entries( array(1,4,5,6,11,13), $search_criteria );
    
    add_menu_page(
        \'Full Quote Form submissions\', // Page Title
        $notification_count ? sprintf( \'Quotes <span class="awaiting-mod">%d</span>\', $notification_count ) : \'View Quotes\',
        \'manage_options\', // Capabilities 
        \'admin.php?page=gf_entries&id=13\', // menu slug
        \'\', // callback function
        \'dashicons-format-aside\', // icon URL
        6 // position
    );
}

结束

相关推荐

Wp_Options中的临时RSS提要没有自动删除吗?

我刚刚注意到55000个条目(!)在我的wp\\U选项表中。我有一阵子没去那里了。所以我跑了:delete from `wp_options` where `option_name` like \'_transient_timeout_rss%\' delete from `wp_options` where `option_name` like \'_transient_rss_%\' 还有。。。现在返回到645个条目。。。既然transient似乎是永恒的,我怎么能自动删除这些旧的R