Cách tạo thông báo tùy chỉnh trên cập nhật plugin


10

Tôi thấy thông báo này ngày hôm nay khi truy cập trang plugin của tôi: thông báo cập nhật plugin tùy chỉnh

Vậy, làm cách nào để tạo cái này nếu tôi muốn cập nhật các plugin của riêng mình được lưu trữ trên wordpress?

Câu trả lời:


9

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.


Ah, cái móc đó là thứ tôi đang tìm kiếm. Thx
ariefbayu

10

Móc treo

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

Chức năng gọi lại nối

Bản thân chức năng này có hai $variablestệ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().

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.