J'ai vu ce message aujourd'hui en accédant à ma page de plugin:
Alors, comment puis-je créer ceci si je veux mettre à jour mes propres plugins hébergés sur wordpress?
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.
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 );
}
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()
.