Jak utworzyć niestandardowy komunikat przy aktualizacji wtyczki

10

Widziałem ten komunikat dzisiaj podczas uzyskiwania dostępu do mojej strony wtyczki: niestandardowy komunikat o aktualizacji wtyczki

Jak to zrobić, jeśli chcę zaktualizować własne wtyczki hostowane na wordpress?

ariefbayu
źródło

Odpowiedzi:

9

Ta wiadomość jest tworzona przez W3_Total_Cache->in_plugin_update_message()hooked to "in_plugin_update_message-$file"in wp_plugin_update_row().

Ma kilka lat pięćdziesiątych, aby parsować plik Readme i wyświetlać informacje z dziennika zmian, ale ogólnie rzecz biorąc, możesz po prostu echo niektórych rzeczy, jak w przypadku każdego innego haka.

Rarst
źródło
Ach, tego haka właśnie szukam. Thx
ariefbayu,
10

Budowa haka

Aby wyczyścić nazwę haka akcji:

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

Odłożona funkcja oddzwaniania

Do samej funkcji $variablesdołączono dwa : $plugins_data& $r, do których dostęp można uzyskać dzięki wtyczce.

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

Notatka:

Takie podejście można znaleźć we wtyczce do sprawdzania linków wewnętrznych .

Dodanie:

plugin_basename(__FILE__)można użyć zamiast tych dwóch wierszy powyżej. Sprawdzanie, czy bieżąca strona jest stroną wtyczki, nie jest tak naprawdę konieczne, ponieważ funkcja będzie wywoływana tylko przez tę stronę. (Bardzo niewielka) korzyść wciąż polega na tym, że nie masz dołączonego innego połączenia zwrotnego. Ponieważ ta odpowiedź jest dość stara, podczas gdy to podejście nadal działa bez problemu, sprawdź teraz obiekt zwracany przez get_current_screen().

kajzer
źródło