Yönetici menü öğesine güncelleme bildirim balonu eklensin mi?


9

Daha anlamlı olması için bunu yeniden ifade ettim.

Tamam, varsayılan WordPress eklentileri gibi güncellemeleri kontrol eden bir uzak hizmet kullanan bir eklentim var, bu durumda sadece bir XML dosyasını kontrol ediyor.

resim açıklamasını buraya girinBir güncelleme mevcut olduğunda böyle bir menü balonu göstermek istiyorum .

Sadece bir "1" veya "uyarı" gibi bir metin gösterebilir, önemli değil.

Eklentim bir seçenekler sayfası kullandığından (kullanarak add_options_page) eklenti ayarları varsayılan "Ayarlar" alt menüsünde gösterilir.

Sanırım baloncuğun ortaya çıkmasını sağlamak için aşağıdaki CSS'yi eklemeliyim,

<span class='update-plugins count-1' title='title'><span class='update-count'>1</span></span>

ve küreselleşmek $submenu. Sorun, her site farklı değerlere sahip olacağı için menü için sabit kodlanmış bir dizi değeri kullanamıyorum.

Bu yüzden kullanamıyorum $submenu[80][10] .= <span class='update-plugins count-1' title='title'><span class='update-count'>1</span></span>

Eklentilerimin alt menü değerini nasıl bulabilirim, dizi boyunca döngü yapmam ve dize değerleriyle eşleşmem gerekir mi?

Ayrıca değerleri sabit kodladığımda bile balonun görünmesini sağlayamadım.

//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>");  

       }
  }

ve işte böyle var_dump($submenu);görünüyor,

["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"

     ...

      }

Bunun nedeni nedir? Tam olarak ne yapmak istiyorsun?
Ján Bočínec

1
@Wyck: Mevcut güncelleme ve denetlenmemiş yorumların sayısını gösteren balondan mı bahsediyorsunuz ? Belki daha açık hale getirmek için sorunuzu bir ekran görüntüsü içerecek şekilde güncellemelisiniz.
Jan Fabry

Evet, ekranı ekleyeceğim.
Wyck

Tam olarak, mevcut güncellemeleri belirtmek istiyor musunuz? WPORG deposu tarafından barındırılan Temalar ve Eklentiler için bu güncelleme bildirimi otomatik olarak gerçekleştirilir.
Chip Bennett

Bir eklenti için özel bir işlevdir, başka bir hizmetten uzaktan güncellemeler alır ve aynı güncelleme bildirim işlevini kullanmak istiyorum.
Wyck

Yanıtlar:


8

Bunu aradığın zaman yapardım add_options_page(), daha sonra değil. Bunu iç yapılarla oynamak yerine desteklenen API ile yapmak her zaman daha iyidir.

Eklenti güncelleyici eklenti durumunu periyodik olarak kontrol eder ve sonucu geçici olarak kaydeder . Bu, yalnızca menü oluşturulduğunda bu önbelleğe alınan durumu okuduğu anlamına gelir , her sayfa yüklemesinde tam denetimi yapmaz. Benzer bir şey yapabilirsiniz:

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

Bildirim balonu ile menü öğesi

Gerçek uyarı kontrolünü yaptığınızda, sonuçları daha sonra okunabilmesi için geçici olarak kaydedersiniz:

if ( ! empty( $matches ) ) {
    set_transient( 'wpse15567_warnings', $matches );
}

Uyarı olmadığında özel bir şey yapmadığımı fark et. O sınıfı alır çünkü kabarcık görüntülenen almaz count-0, sahip display: nonecss içinde .


1
Mükemmel! Teşekkürler, bunu yapmanın çok daha iyi bir yolu.
Wyck
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.