¿Agregar burbuja de notificación de actualización al elemento del menú de administración?

9

He reformulado esto para que tenga más sentido.

Ok, tengo un complemento que usa un servicio remoto que busca actualizaciones, al igual que los complementos predeterminados de WordPress, en este caso solo verifica un archivo XML.

Quiero mostrar una burbuja de menú como esta ingrese la descripción de la imagen aquícuando hay una actualización disponible.

Puede mostrar solo un "1" o texto como "alerta", no importa.

Como mi complemento usa una página de opciones (usando add_options_page), la configuración del complemento se muestra en el submenú "Configuración" predeterminado.

Creo que necesito agregar el siguiente CSS para que aparezca la burbuja,

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

y vincularse a lo global $submenu. El problema es que no puedo usar un valor de matriz codificado para el menú ya que cada sitio tendrá valores diferentes.

Entonces no puedo usar $submenu[80][10] .= <span class='update-plugins count-1' title='title'><span class='update-count'>1</span></span>

¿Cómo puedo encontrar el valor del submenú de mis complementos? ¿Tengo que recorrer la matriz y hacer coincidir los valores de la cadena?

Además, incluso cuando codifiqué los valores, no pude hacer que apareciera la burbuja.

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

       }
  }

y así es var_dump($submenu);como se ve,

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

     ...

      }
Wyck
fuente
¿Cuál es la razón para esto? ¿Qué es exactamente lo que quieres hacer?
Ján Bočínec
1
@Wyck: ¿Estás hablando de la burbuja que indica la cantidad de actualizaciones disponibles y comentarios no moderados ? Tal vez debería actualizar su pregunta para incluir una captura de pantalla, para que esto sea más claro.
Jan Fabry
Sí exactamente, agregaré la pantalla.
Wyck
¿Para qué, exactamente, quieres indicar las actualizaciones disponibles? para los plugins y temas alojados en el repositorio de WPORG, esta notificación de actualización se gestiona automáticamente.
Chip Bennett
Es una función personalizada para un complemento, obtiene actualizaciones remotas de otro servicio y quiero usar la misma funcionalidad de notificación de actualización.
Wyck

Respuestas:

8

Haría esto cuando llames add_options_page(), no más tarde. Siempre es mejor hacer esto con la API compatible en lugar de jugar con las estructuras internas.

El actualizador de complementos verifica periódicamente el estado del complemento y luego guarda el resultado en un transitorio . Esto significa que solo lee este estado en caché cuando se crea el menú, no realiza la verificación completa en cada carga de página. Puedes hacer algo similar:

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

Elemento de menú con burbuja de notificación

Cuando realiza la comprobación de advertencia real, guarda los resultados en el transitorio para que pueda leerse más tarde:

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

Tenga en cuenta que no hago nada especial cuando no hay advertencias. La burbuja no se muestra porque obtiene la clase count-0, que tiene display: noneen el CSS .

Jan Fabry
fuente
1
¡Perfecto! Gracias, esta es una forma mucho mejor de hacer esto.
Wyck