问题描述
我在访问我的插件页面时看到这个消息:
那么,如果我想更新我自己在 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 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。