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