Eklenti güncellemesinde özel mesaj nasıl oluşturulur


10

Bu mesajı bugün eklenti sayfama erişirken gördüm: özel eklenti güncelleme mesajı

Peki, wordpress'te barındırılan kendi eklentilerimi güncellemek istersem bunu nasıl oluştururum?

Yanıtlar:


9

Bu mesaj tarafından oluşturulan W3_Total_Cache->in_plugin_update_message()çengel "in_plugin_update_message-$file"içinde wp_plugin_update_row().

Benioku ayrıştırmak ve changelog bilgi görüntülemek için bazı şıklık yapar, ama genel olarak sadece bazı şeyler diğer kanca gibi yankılayabilirsiniz.


Ah, bu kanca aradığım şey. Thx
ariefbayu

10

Kanca yapımı

İşlem kancası adını netleştirmek için:

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

Kancalı geri arama işlevi

Fonksiyonun kendisinin iki $variableseki vardır: $plugins_data& $r, eklentiniz tarafından erişilebilir.

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

Dipnot:

Bu yaklaşım Dahili bağlantı denetleyicisi eklentisinde bulunabilir.

İlave:

plugin_basename(__FILE__)yukarıdaki bu iki satır yerine kullanılabilir. Ayrıca, işlev sayfanın eklenti sayfası olup olmadığını kontrol etmek gerçekten gerekli değildir, çünkü işlev yalnızca o sayfa tarafından çağrılır. (Çok küçük) yarar hala başka bir geri arama bağlı olmasıdır. Bu cevap oldukça eski olduğu için, bu yaklaşım hala sorunsuz bir şekilde çalışırken, şimdi geri dönen nesneye karşı kontrol edin get_current_screen().

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.