web-dev-qa-db-ja.com

管理者メニュー項目に更新通知バブルを追加しますか?

私はもっ​​と意味を成すためにこれを再言しました。

さて、私はデフォルトのWordPressプラグインのように、アップデートをチェックするリモートサービスを使用するプラグインを持っています。

このようなメニューの吹き出しを見せたい enter image description here 更新が利用可能になったとき。

「1」または「alert」のようなテキストだけを表示できますが、問題ありません。

私のプラグインは(add_options_pageを使って)オプションページを使っているので、プラグイン設定はデフォルトの "Settings"サブメニューの下に現れます。

バブルを表示するには、次の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"

     ...

      }
8
Wyck

私はあなたがadd_options_page()を呼び出すときにこれをするでしょう、後でではありません。内部構造で遊ぶのではなく、サポートされているAPIを使ってこれを行う方が常によいです。

プラグインアップデータは定期的にプラグインの状態をチェックしてから結果を transient に保存します。これは これはキャッシュされたステータスだけを読むことを意味します メニューが作成されるとき、それはすべてのページがロードされたときに完全なチェックをしません。あなたは似たようなことをすることができます:

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 );
}

警告がない場合は、特別なことはしません。バブルはcssにcount-0を持つクラスdisplay: noneを取得するため表示されません .

7
Jan Fabry