it-swarm.com.de

So erstellen Sie eine benutzerdefinierte Nachricht beim Plugin-Update

Ich habe diese Nachricht heute beim Zugriff auf meine Plugin-Seite gesehen: custom plugin update message

Wie erstelle ich das, wenn ich meine eigenen Plugins aktualisieren möchte, die auf WordPress gehostet werden?

10
ariefbayu

Diese Nachricht wird von W3_Total_Cache->in_plugin_update_message() erstellt, der mit "in_plugin_update_message-$file"in wp_plugin_update_row() verknüpft ist.

Das Parsen der Readme-Datei und das Anzeigen von Informationen aus dem Changelog ist ein Kinderspiel, aber insgesamt können Sie einiges wie bei jedem anderen Hook wiederholen.

9
Rarst

Hook Gebäude

So verdeutlichen Sie den Namen des Aktions-Hooks:

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

Hooked-Callback-Funktion

An die Funktion selbst sind zwei $variables angehängt: $plugins_data & $r, auf die Ihr Plugin zugreifen kann.

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

Fußnote:

Diese Vorgehensweise finden Sie im Internal Link Checker Plugin.

Ergänzung:

plugin_basename(__FILE__) kann anstelle der beiden obigen Zeilen verwendet werden. Auch zu prüfen, ob es sich bei der aktuellen Seite um die Pluginseite handelt, ist nicht unbedingt erforderlich, da die Funktion ohnehin nur von dieser Seite aufgerufen wird. Der (sehr geringe) Vorteil ist immer noch, dass Sie keinen weiteren Rückruf haben. Da diese Antwort ziemlich alt ist, würden Sie, während dieser Ansatz weiterhin problemlos funktioniert, jetzt das von get_current_screen() zurückgegebene Objekt überprüfen.

10
kaiser