Как создать собственное сообщение при обновлении плагина

10

Я видел это сообщение сегодня при доступе к моей странице плагина: пользовательское сообщение об обновлении плагина

Итак, как мне создать это, если я хочу обновить свои собственные плагины, которые размещены на WordPress?

ariefbayu
источник

Ответы:

9

Это сообщение создано W3_Total_Cache->in_plugin_update_message()подключили к "in_plugin_update_message-$file"в wp_plugin_update_row().

Он делает несколько полезных действий для разбора readme и отображения информации из журнала изменений, но в целом вы можете просто повторить некоторые вещи, как с любой другой ловушкой.

Rarst
источник
Ах, этот крючок - то, что я ищу. Thx
ariefbayu
10

Крюк строительный

Чтобы прояснить имя хука действия:

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

Сноска:

Этот подход может быть найден во Внутренней ссылке, проверяющей плагине .

Дополнение:

plugin_basename(__FILE__)можно использовать вместо этих двух строк выше. Также проверять, действительно ли текущая страница является страницей плагина, на самом деле не нужно, так как функция все равно будет вызываться только этой страницей. Еще одно (очень незначительное) преимущество заключается в том, что к вам не прикреплен еще один обратный вызов. Поскольку этот ответ довольно старый, вы бы, хотя этот подход все еще работал без проблем, теперь сверяются с объектом, возвращаемым get_current_screen().

кайзер
источник