如何在插件更新上创建自定义消息


10

我今天在访问插件页面时看到了以下消息: 自定义插件更新消息

因此,如果我想更新自己在wordpress上托管的插件,该如何创建呢?

Answers:


9

此消息是通过W3_Total_Cache->in_plugin_update_message()钩在"in_plugin_update_message-$file"中创建的wp_plugin_update_row()

解析自述文件并显示来自changelog的信息确实有些花哨,但总的来说,您可以像其他任何钩子一样回显某些内容。


啊,那个钩子正是我想要的。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()

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.