Câu trả lời:
Thông báo này được tạo bằng cách W3_Total_Cache->in_plugin_update_message()
nối "in_plugin_update_message-$file"
vào wp_plugin_update_row()
.
Nó thực hiện một số nifties để phân tích readme và hiển thị thông tin từ changelog, nhưng nhìn chung bạn chỉ có thể lặp lại một số nội dung như với bất kỳ hook nào khác.
Để làm rõ tên hook hành động:
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 );
}
Bản thân chức năng này có hai $variables
tệp đính kèm: $plugins_data
& $r
, có thể được truy cập bởi plugin của bạn.
/**
* 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;
}
Chú thích:
Cách tiếp cận này có thể được tìm thấy trong plugin Trình kiểm tra liên kết nội bộ .
Thêm vào:
plugin_basename(__FILE__)
có thể được sử dụng thay vì hai dòng trên. Ngoài ra, kiểm tra xem trang hiện tại có phải là trang plugin không thực sự cần thiết hay không vì chức năng sẽ chỉ được gọi bởi trang đó. Lợi ích (rất nhỏ) vẫn là bạn không có một cuộc gọi lại khác kèm theo. Vì câu trả lời này khá cũ, bạn sẽ làm, trong khi phương pháp này vẫn hoạt động mà không gặp vấn đề gì, bây giờ hãy kiểm tra đối tượng được trả về get_current_screen()
.