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

10

J'ai vu ce message aujourd'hui lors de l'accès à ma page de plugin: message de mise à jour du plugin personnalisé

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

ariefbayu
la source

Réponses:

9

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

Il fait quelques années 50 pour analyser le fichier Lisez-moi et afficher les informations du journal des modifications, mais dans l'ensemble, vous pouvez simplement faire écho à certaines choses comme avec n'importe quel autre crochet.

Rarst
la source
Ah, ce crochet est ce que je recherche. Thx
ariefbayu
10

Bâtiment de crochet

Pour rendre le nom du crochet d'action 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 raccroché

La fonction elle-même a deux $variablesattachés: $plugins_data& $r, qui peut être accessible par votre plugin.

/**
 * 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 le plugin Internal Link Checker .

Une addition:

plugin_basename(__FILE__)peut être utilisé à la place de ces deux lignes ci-dessus. Il n'est pas vraiment nécessaire de vérifier si la page actuelle est la page du plugin car la fonction ne sera appelée que par cette page de toute façon. L'avantage (très mineur) est que vous n'avez aucun autre rappel attaché. Comme cette réponse est assez ancienne, vous devriez, bien que cette approche fonctionne toujours sans problème, comparer maintenant l'objet retourné par get_current_screen().

kaiser
la source