Thêm bong bóng thông báo cập nhật vào mục menu admin?


9

Tôi đã diễn đạt lại từ này để có ý nghĩa hơn.

Ok, tôi có một plugin sử dụng dịch vụ từ xa để kiểm tra các bản cập nhật, giống như các plugin WordPress mặc định, trong trường hợp này nó chỉ kiểm tra một tệp XML.

Tôi muốn hiển thị một bong bóng menu như thế này nhập mô tả hình ảnh ở đâykhi có bản cập nhật.

Nó chỉ có thể hiển thị "1" hoặc văn bản như "cảnh báo", không thành vấn đề.

Vì plugin của tôi sử dụng trang tùy chọn (sử dụng add_options_page), các cài đặt plugin hiển thị dưới menu con "Cài đặt" mặc định.

Tôi nghĩ rằng tôi cần thêm CSS sau đây để bong bóng xuất hiện,

<span class='update-plugins count-1' title='title'><span class='update-count'>1</span></span>

và gắn kết với toàn cầu $submenu. Vấn đề là tôi không thể sử dụng giá trị mảng được mã hóa cứng cho menu vì mỗi trang web sẽ có các giá trị khác nhau.

Vì vậy, tôi không thể sử dụng $submenu[80][10] .= <span class='update-plugins count-1' title='title'><span class='update-count'>1</span></span>

Làm cách nào tôi có thể tìm thấy giá trị menu con bổ trợ của mình, tôi có phải lặp qua mảng và khớp với các giá trị chuỗi không?

Ngoài ra, ngay cả khi tôi mã hóa các giá trị, tôi cũng không thể thấy bong bóng xuất hiện.

//adding plugin to menu
add_action('admin_menu', 'sec_plugin_checker');

function sec_plugin_checker() {
  add_options_page(' Plugin Checker', 'Plugin Check', 'activate_plugins', 
  'sec_plugin_check', 'sec_checker');


// the conditional where I want the bubble to appear

if (!empty($matches)){ 
    echo "Match found !<br />";

    global $submenu;
    foreach( $submenu as $item ) {

    $item[41][20] = sprintf( __( 'Updates %s', 'sec_plugin_checker' ),  
                "<span class='update-plugins count-1' title='title'>
                 <span class='update-count'>1</span></span>");  

       }
  }

và đây là những gì var_dump($submenu);trông giống như,

["options-general.php"]=>
array(9){
...

[41]=>
    array(4) {
      [0]=>
      string(20) "Plugin Check"
      [1]=>
      string(16) "activate_plugins"
      [2]=>
      string(21) "sec_plugin_check"
      [3]=>
      string(23) " Plugin Checker"

     ...

      }

Lý do cho điều này là gì? Chính xác những gì bạn muốn làm?
Ján Bočínec

1
@Wyck: Bạn đang nói về bong bóng cho biết số lượng cập nhật có sẵn và nhận xét không được kiểm duyệt ? Có lẽ bạn nên cập nhật câu hỏi của bạn để bao gồm một ảnh chụp màn hình, để làm cho điều này rõ ràng hơn.
Jan Fabry

Có chính xác, tôi sẽ thêm màn hình.
Wyck

Đối với những gì, chính xác, bạn muốn chỉ ra các bản cập nhật có sẵn? đối với Chủ đề và Plugin lưu trữ trên kho lưu trữ WPORG, thông báo cập nhật này được xử lý tự động.
Chip Bennett

Đây là một chức năng tùy chỉnh cho một plugin, nó được cập nhật từ xa từ một dịch vụ khác và tôi muốn sử dụng cùng chức năng thông báo cập nhật.
Wyck

Câu trả lời:


8

Tôi sẽ làm điều này khi bạn gọi add_options_page(), không phải sau này. Luôn luôn tốt hơn để làm điều này với API được hỗ trợ thay vì chơi với các cấu trúc bên trong.

Trình cập nhật plugin kiểm tra định kỳ trạng thái plugin và sau đó lưu kết quả trong thời gian ngắn . Điều này có nghĩa là nó chỉ đọc trạng thái được lưu trong bộ nhớ cache này khi menu được tạo, nó không thực hiện kiểm tra đầy đủ trên mỗi lần tải trang. Bạn có thể làm một cái gì đó tương tự:

add_action( 'admin_menu', 'wpse15567_admin_menu' );
function wpse15567_admin_menu()
{
    $warnings = get_transient( 'wpse15567_warnings' );
    $warning_count = count( $warnings );
    $warning_title = esc_attr( sprintf( '%d plugin warnings', $warning_count ) );

    $menu_label = sprintf( __( 'Plugin Checker %s' ), "<span class='update-plugins count-$warning_count' title='$warning_title'><span class='update-count'>" . number_format_i18n($warning_count) . "</span></span>" );

    add_options_page( 'Plugin Check', $menu_label, 'activate_plugins', 'sec_plugin_check', 'sec_checker' );
}

Mục menu với bong bóng thông báo

Khi bạn thực hiện kiểm tra cảnh báo thực tế, bạn lưu kết quả tạm thời để có thể đọc sau:

if ( ! empty( $matches ) ) {
    set_transient( 'wpse15567_warnings', $matches );
}

Lưu ý rằng tôi không làm gì đặc biệt khi không có cảnh báo. Các bong bóng không được hiển thị vì nó được lớp count-0, trong đó có display: nonetrong css .


1
Hoàn hảo! Cảm ơn đây là một cách tốt hơn để làm điều này.
Wyck
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.