So erstellen Sie eine benutzerdefinierte Nachricht beim Plugin-Update

10

Ich habe diese Nachricht heute beim Zugriff auf meine Plugin-Seite gesehen: benutzerdefinierte Plugin-Update-Nachricht

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

Ariefbayu
quelle

Antworten:

9

Diese Nachricht wird von W3_Total_Cache->in_plugin_update_message()Hooked to "in_plugin_update_message-$file"In erstellt wp_plugin_update_row().

Es dauert einige fünfziger Jahre, um Readme-Dateien zu analysieren und Informationen aus dem Änderungsprotokoll anzuzeigen, aber insgesamt können Sie wie bei jedem anderen Hook auch nur einige Dinge wiederholen.

Selten
quelle
Ah, dieser Haken ist das, wonach ich suche. Thx
ariefbayu
10

Hakengebäude

So machen Sie den Namen des Aktionshakens deutlich:

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 $variablesangehä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:

Dieser Ansatz ist im Plugin für die interne Linkprüfung enthalten .

Zusatz:

plugin_basename(__FILE__)kann anstelle der beiden obigen Zeilen verwendet werden. Auch zu überprüfen, ob die aktuelle Seite die Plugin-Seite ist, ist nicht wirklich notwendig, da die Funktion sowieso nur von dieser Seite aufgerufen wird. Der (sehr geringfügige) Vorteil besteht weiterhin darin, dass Sie keinen weiteren Rückruf erhalten. Da diese Antwort ziemlich alt ist, würden Sie, während dieser Ansatz immer noch problemlos funktioniert, jetzt mit dem von zurückgegebenen Objekt vergleichen get_current_screen().

Kaiser
quelle