問題描述

我在訪問我的外掛頁面時看到這個訊息:

那麼,如果我想更新我自己在 wordpress 上託管的外掛,我該如何建立?

最佳解決方案

此訊息由 W3_Total_Cache->in_plugin_update_message()建立於 wp_plugin_update_row()中的"in_plugin_update_message-$file"

它可以解析 readme 並從 changelog 顯示資訊,但總體而言,您可以像任何其他鉤子一樣回應某些內容。

次佳解決方案

鉤建築

要使動作掛鉤名稱清除:

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

掛鉤回撥函式

該功能本身具有兩個 $variables$plugins_data& $r,可以透過您的外掛訪問。

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

腳註:

這種方法可以在 Internal link checker 外掛中找到。

加成:

可以使用 plugin_basename(__FILE__)代替上述兩行。還要檢查當前頁面是否是外掛頁面是不是真的必要,因為函式只會被該頁面呼叫。 (很小的) 好處還是你沒有另外回撥。由於這個答案很舊,所以當這種方法仍然沒有問題的時候,現在檢查 get_current_screen()返回的物件。

參考文獻

注:本文內容整合自 Google/Baidu/Bing 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。