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

10

J'ai vu ce message aujourd'hui en accédant à ma page de plug-in:

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

    
posée ariefbayu 20.09.2010 - 14:52

2 réponses

9

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

L'analyse du fichier readme et l'affichage des informations de changelog sont effectuées dans les années 1950, mais dans l'ensemble, vous pouvez simplement rappeler certaines choses comme n'importe quel autre point d'ancrage.

    
réponse donnée Rarst 20.09.2010 - 15:08
10

Construction du crochet

Pour préciser le nom du crochet d'action:

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 , auquel 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 est disponible dans le plug-in Vérificateur de lien interne .

Ajout:

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 renvoyé par get_current_screen() .

    
réponse donnée kaiser 11.11.2011 - 18:18

Lire d'autres questions sur les étiquettes