Cómo crear un mensaje personalizado en la actualización del complemento

10

Hoy vi este mensaje cuando accedí a mi página de complementos: mensaje de actualización de complemento personalizado

Entonces, ¿cómo creo esto si quiero actualizar mis propios complementos alojados en WordPress?

ariefbayu
fuente

Respuestas:

9

Este mensaje es creado por W3_Total_Cache->in_plugin_update_message()hooked a "in_plugin_update_message-$file"in wp_plugin_update_row().

Hace algunos años cincuenta para analizar el archivo Léame y mostrar la información del registro de cambios, pero en general puede hacer eco de algunas cosas como con cualquier otro gancho.

Rarst
fuente
Ah, ese gancho es lo que estoy buscando. Thx
ariefbayu
10

Gancho de construcción

Para aclarar el nombre del gancho de acción:

global $pagenow;
if ( 'plugins.php' === $pagenow )
{
    // Better update message
    $file   = basename( __FILE__ );
    $folder = basename( dirname( __FILE__ ) );
    $hook = "in_plugin_update_message-{$folder}/{$file}";
    add_action( $hook, 'your_update_message_cb', 20, 2 );
}

Función de devolución de llamada enganchada

La función en sí tiene dos $variablesadjuntos: $plugins_data& $r, a los que puede acceder su complemento.

/**
 * Displays an update message for plugin list screens.
 * Shows only the version updates from the current until the newest version
 * 
 * @param (array) $plugin_data
 * @param (object) $r
 * @return (string) $output
 */
function your_update_message_cb( $plugin_data, $r )
{
    // readme contents
    $data       = file_get_contents( 'http://plugins.trac.wordpress.org/browser/YOUR_PLUGIN_FOLDER_NAME_IN_THE_OFFICIAL_REPO/trunk/readme.txt?format=txt' );

    // assuming you've got a Changelog section
    // @example == Changelog ==
    $changelog  = stristr( $data, '== Changelog ==' );

    // assuming you've got a Screenshots section
    // @example == Screenshots ==
    $changelog  = stristr( $changelog, '== Screenshots ==', true );

    // only return for the current & later versions
    $curr_ver   = get_plugin_data('Version');

    // assuming you use "= v" to prepend your version numbers
    // @example = v0.2.1 =
    $changelog  = stristr( $changelog, "= v{$curr_ver}" );

    // uncomment the next line to var_export $var contents for dev:
    # echo '<pre>'.var_export( $plugin_data, false ).'<br />'.var_export( $r, false ).'</pre>';

    // echo stuff....
    $output = 'whatever you want to do';
    return print $output;
}

Nota:

Este enfoque se puede encontrar en el complemento Comprobador de enlaces internos .

Adición:

plugin_basename(__FILE__)se puede usar en lugar de las dos líneas anteriores. Además, verificar si la página actual es la página del complemento no es realmente necesario ya que la función solo será llamada por esa página de todos modos. El beneficio (muy pequeño) aún es que no tiene otra devolución de llamada adjunta. Como esta respuesta es bastante antigua, aunque este enfoque todavía funciona sin problemas, ahora verificará el objeto devuelto por get_current_screen().

emperador
fuente