Cara Betul-Betul Disable WordPress Site Health Widget (4 Laluan Kod)

Korang pernah tak buka WordPress dashboard dan nampak widget Site Health Status tu? Dia punya bulatan hijau tu nampak menarik, lepas tu dia tulis “Baik” – tapi sebenarnya ada beberapa benda yang korang kena buat lagi. Kat bawah tu, ada tiga baris yang dia benderakan:

  • Korang kena buang pemalam yang tak aktif
  • Korang kena buang tema yang tak aktif
  • Tapak korang ditetapkan untuk tunjuk ralat kepada pelawat

Kebanyakan orang, bila nampak benda ni, terus nak buang. Tapi saya nak cakap benda lain: ini masalah prestasi, dan cara biasa orang fix dia tak fix langsung.

Apa Sebenarnya Widget Ni Buat?

Jom kita tengok apa widget ni buat sebenarnya. Dia bukan sekadar tunjuk skor dari database. Bila korang buka dashboard, WordPress akan jalankan beberapa ujian async melalui REST API. Antara ujian tu ialah loopback test – WordPress akan call URL sendiri dan tunggu response.

Faham tak? Kat server yang share ramai-ramai, request yang nak test tapak korang tu akan bersaing dengan request yang nak tunjuk halaman yang korang tengah pandang tu. Lambatlah jawabnya.

Yang bestnya, ada satu benda yang hampir tak ada orang tahu. WordPress ada scheduled cron event nama wp_site_health_scheduled_check yang akan jalankan semua ujian tu sekali lagi di latar belakang. Setiap minggu. Setiap tapak yang korang pernah buat. Korang tak pernah nampak benda ni sebab korang tak pernah check.

Jawapan Yang Korang Akan Dapat

Bila korang google “how to remove site health widget”, inilah jawapan yang korang akan dapat:

Jawapan pertama (paling atas sekali): Pergi ke Dashboard → Screen Options → uncheck “Site Health Status”.

Masalahnya, benda ni hanya untuk satu user. Dia tulis kat user meta. Jadi bila korang uncheck tu, hanya korang je yang tak nampak. Client korang? Dia tetap nampak semua benda tu. Jadi kalau korang fikir dah selesai, sorrylah – tak selesai pun.

Jawapan kedua, orang akan bagi code macam ni:

add_action('wp_dashboard_setup', function () {
remove_meta_box('dashboard_site_health', 'dashboard', 'normal');
});

Code ni memang real. Widget tu hilang untuk semua user. Tapi tak ada apa yang berhenti. Cron tetap jalan. Ujian tetap ada. Korang cuma sorok bacaan tu je, bukan kerja sebenar. Kalau dashboard korang lambat sebelum ni, lepas guna code ni pun tetap lambat. Malah lagi teruk sebab korang fikir dah fix tapi sebenarnya tak fix.

Cara Kedua: Halaman Tools

Ada satu lagi cara yang orang suggest. Halaman Tools ni dia bukan datang dari widget, jadi dua cara tadi tak affect dia:

add_action('admin_menu', function () {
remove_submenu_page('tools.php', 'site-health.php');
}, 99);

Tapi korang kena faham: code ni buang menu item je, bukan halaman tu sendiri. Sesiapa yang taip /wp-admin/site-health.php terus kat browser, tetap boleh buka. Kalau korang nak betul-betul lock, kena guna capability, bukan sorok link.

Cara Keempat: Satu-Satunya Cara Yang Betul

Cara keempat ni ialah satu-satunya cara yang betul-betul hentikan semua semakan. Dia punya test registry dan juga cron event tu sendiri:

add_filter('site_status_tests', function ($tests) {
$tests['direct'] = [];
$tests['async'] = [];
return $tests;
});

add_action('init', function () {
$timestamp = wp_next_scheduled('wp_site_health_scheduled_check');
if ($timestamp) {
wp_unschedule_event($timestamp, 'wp_site_health_scheduled_check');
}
});

Empat hooks, empat laluan kod, satu features. Setiap panduan yang saya baca, dia cover satu je. Ada yang cover dua. Tak ada yang cover empat sekali. Dan beza antara widget tu disembunyikan dengan ujian tu dimatikan, itulah persoalan sebenar.

Apa Yang Jangan Buat

Orang selalu suggest benda ni kat forum. Jangan buat:

define('DISABLE_WP_CRON', true); // untuk stop weekly health check
// atau: unhook REST API // untuk stop async tests

Bunuh WP-Cron sebab nak senyapkan satu acara mingguan? Kena affect scheduled posts, backups, dan update checks sekali. Bunuh REST API sebab nak stop async tests? Block editor pun affected sekali. Kedua-duanya macam potong kaki sebab nak sembuhkan ruam. Kalau korang nampak benda ni kat tapak client, tanya kenapa.

Kesimpulan

Empat laluan kod yang berbeza, satu features. Widget boleh disembunyikan, tapi semakan tetap jalan di latar belakang. Kalau korang nak betul-betul hentikan Site Health, korang kena guna cara keempat: filter site_status_tests dan unschedule event cron tu.

Tapi korang kena ingat: disabled Site Health tak bermakna tapak korang sihat. Dia je yang akan bagitahu korang kalau PHP tak support, HTTPS salah config, module tak ada, atau update berhenti senyap-senyap. Matikan dia, tak ada siapa yang akan dengar benda-benda tu lagi.


Sumber Rujukan:

  • Artikel ini diterjemahkan dari Dev.to
  • Penulis asal: Lucas Fenwick
  • Diterjemahkan ke Bahasa Melayu untuk haqis.com
Comments