เพิ่มบับเบิ้ลการแจ้งเตือนการอัปเดตให้กับรายการเมนูผู้ดูแลระบบหรือไม่


9

ฉันได้รับคำนี้อีกครั้งเพื่อให้เหมาะสมมากขึ้น

ตกลงฉันมีปลั๊กอินที่ใช้บริการระยะไกลที่ตรวจสอบการปรับปรุงเช่นเดียวกับปลั๊กอิน WordPress เริ่มต้นในกรณีนี้มันเพียงตรวจสอบไฟล์ XML

ฉันต้องการแสดงเมนูฟองอย่างนี้ป้อนคำอธิบายรูปภาพที่นี่เมื่อมีการอัปเดต

มันสามารถแสดงเพียง "1" หรือข้อความเช่น "การแจ้งเตือน" มันไม่สำคัญ

เนื่องจากปลั๊กอินของฉันใช้หน้าตัวเลือก (โดยใช้add_options_page) การตั้งค่าปลั๊กอินจะปรากฏขึ้นภายใต้เมนูย่อย "การตั้งค่า" เริ่มต้น

ฉันคิดว่าฉันต้องเพิ่ม CSS ต่อไปนี้เพื่อให้ได้ฟองเพื่อแสดง

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

$submenuและผูกเข้าสู่ระดับโลก ปัญหาคือฉันไม่สามารถใช้ค่าอาเรย์แบบตายตัวสำหรับเมนูเนื่องจากแต่ละไซต์จะมีค่าแตกต่างกัน

ดังนั้นฉันไม่สามารถใช้ $submenu[80][10] .= <span class='update-plugins count-1' title='title'><span class='update-count'>1</span></span>

ฉันจะหาค่าเมนูย่อยของปลั๊กอินได้อย่างไรฉันต้องวนลูปผ่านอาร์เรย์และจับคู่ค่าสตริงหรือไม่

นอกจากนี้เมื่อฉันกำหนดค่าอย่างหนักฉันก็ไม่สามารถทำให้ลูกโป่งปรากฏขึ้นได้

//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>");  

       }
  }

และนี่คือสิ่งที่var_dump($submenu);ดูเหมือน

["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"

     ...

      }

อะไรคือสาเหตุของสิ่งนี้? คุณต้องการทำอะไร
JánBočínec

1
@Wyck: คุณกำลังพูดถึงฟองที่ระบุจำนวนของการปรับปรุงที่มีอยู่และความคิดเห็นที่ไม่ได้ทำการถอดรหัส ? บางทีคุณควรอัปเดตคำถามของคุณเพื่อรวมภาพหน้าจอเพื่อทำให้ชัดเจนยิ่งขึ้น
Jan Fabry

ใช่ฉันจะเพิ่มหน้าจอ
Wyck

สำหรับสิ่งที่คุณต้องการที่จะระบุการปรับปรุงที่มีอยู่? สำหรับธีมและปลั๊กอินที่โฮสต์โดยที่เก็บ WPORG การแจ้งเตือนการอัพเดตนี้จะถูกจัดการโดยอัตโนมัติ
Chip Bennett

มันเป็นฟังก์ชั่นที่กำหนดเองสำหรับปลั๊กอินมันได้รับการอัปเดตระยะไกลจากบริการอื่นและฉันต้องการใช้ฟังก์ชันการแจ้งเตือนการอัพเดตเดียวกัน
Wyck

คำตอบ:


8

ฉันจะทำสิ่งนี้เมื่อคุณโทรadd_options_page()ไม่ได้ในภายหลัง การทำเช่นนี้จะดีกว่าเสมอด้วย API ที่รองรับแทนที่จะเล่นกับโครงสร้างภายใน

ปลั๊กอินอัพเดทเป็นระยะ ๆ การตรวจสอบสถานะปลั๊กอินและแล้วบันทึกผลในชั่วคราว ซึ่งหมายความว่ามันจะอ่านสถานะแคชนี้เท่านั้นเมื่อเมนูถูกสร้างขึ้นมันไม่ได้ทำการตรวจสอบอย่างเต็มรูปแบบในทุก ๆ หน้าโหลด คุณสามารถทำสิ่งที่คล้ายกัน:

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' );
}

รายการเมนูพร้อมฟองการแจ้งเตือน

เมื่อคุณทำการตรวจสอบคำเตือนที่เกิดขึ้นจริงคุณบันทึกผลลัพธ์ในชั่วคราวเพื่อให้สามารถอ่านได้ในภายหลัง:

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

สังเกตว่าฉันไม่ได้ทำอะไรเป็นพิเศษเมื่อไม่มีคำเตือน ฟองไม่ได้รับการแสดงเพราะได้รับการเรียนcount-0, ซึ่งมีdisplay: noneในแบบ CSS


1
ที่สมบูรณ์แบบ! ขอบคุณนี่เป็นวิธีที่ดีกว่ามากในการทำเช่นนี้
Wyck
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.