web-dev-qa-db-fra.com

Comment créer un message personnalisé lors de la mise à jour du plugin

J'ai vu ce message aujourd'hui en accédant à ma page de plugin: custom plugin update message

Alors, comment puis-je créer ceci si je veux mettre à jour mes propres plugins hébergés sur wordpress?

10
ariefbayu

Ce message est créé par W3_Total_Cache->in_plugin_update_message() raccordé à "in_plugin_update_message-$file" dans wp_plugin_update_row().

Cela fait quelques années cinquante d’analyser le fichier readme et d’afficher les informations de changelog, mais dans l’ensemble, vous pouvez simplement faire écho à des choses comme à n’importe quel autre hook.

9
Rarst

Crochet de construction

Pour que le nom du crochet d’action soit clair:

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

Fonction de rappel accrochée

La fonction elle-même a deux $variables attachés: $plugins_data & $r, auxquels votre plugin peut accéder.

/**
 * 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;
}

Note de bas de page:

Cette approche peut être trouvée dans Internal link checker plugin.

Addition:

plugin_basename(__FILE__) peut être utilisé à la place des deux lignes ci-dessus. Vérifier également si la page en cours est la page du plugin n'est pas vraiment nécessaire car la fonction ne sera appelée que par cette page. L'avantage (très mineur) reste que vous n'avez pas un autre rappel attaché. Comme cette réponse est assez ancienne, vous pouvez, bien que cette approche fonctionne toujours sans problème, maintenant vérifier l’objet retourné par get_current_screen() .

10
kaiser