Cara membuat pesan khusus pada pembaruan plugin

10

Saya melihat pesan ini hari ini ketika mengakses halaman plugin saya: pesan pembaruan plugin kustom

Jadi, bagaimana cara membuat ini jika saya ingin memperbarui plugin saya sendiri yang di-host di wordpress?

ariefbayu
sumber

Jawaban:

9

Pesan ini dibuat oleh W3_Total_Cache->in_plugin_update_message()doyan "in_plugin_update_message-$file"di wp_plugin_update_row().

Ia melakukan beberapa nifties untuk mem-parse readme dan menampilkan info dari changelog, tetapi secara keseluruhan Anda hanya dapat menggemakan beberapa hal seperti dengan kail lainnya.

Jarang
sumber
Ah, kail itu yang saya cari. Thx
ariefbayu
10

Bangunan kait

Untuk membuat nama hook tindakan jelas:

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

Fungsi panggilan balik terkait

Fungsi itu sendiri memiliki dua $variableslampiran: $plugins_data& $r, yang dapat diakses oleh plugin Anda.

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

Catatan kaki:

Pendekatan ini dapat ditemukan di plugin pemeriksa tautan internal .

Tambahan:

plugin_basename(__FILE__)dapat digunakan sebagai pengganti kedua baris di atas. Juga memeriksa apakah halaman saat ini adalah halaman plugin tidak benar-benar diperlukan karena fungsi hanya akan dipanggil oleh halaman itu. Manfaat (sangat kecil) masih adalah bahwa Anda tidak memiliki panggilan balik yang terpasang. Karena jawaban ini sudah cukup tua, Anda akan melakukannya, sementara pendekatan ini masih berfungsi tanpa masalah, sekarang periksa objek yang dikembalikan oleh get_current_screen().

kaisar
sumber