DICKY IBROHIM
Catatan Teknis

Fail-Safe: Pastikan Bulk Action WooCommerce Selalu Muncul untuk Shop Manager

Fail-Safe: Pastikan Bulk Action WooCommerce Selalu Muncul untuk Shop Manager

Snippet ampuh untuk memaksa bulk action tetap ada bagi role tertentu, mencegah plugin lain menghapusnya.

Pernahkah Anda mengalami situasi di mana checkbox atau dropdown “Tindakan Massal” (Bulk Actions) di halaman Pesanan WooCommerce tiba-tiba menghilang untuk Shop Manager? Hal ini sering terjadi karena konflik plugin yang secara tidak sengaja menghapus action yang tersedia untuk user non-admin.

Kita bisa menerapkan mekanisme “fail-safe” agar action massal ini tidak pernah kosong untuk role tersebut.

Kode Fail-Safe (Metode MU-Plugin)

Cara paling aman dan handal untuk menerapkan ini adalah sebagai Must-Use Plugin (MU-Plugin). Metode ini memastikan kode tereksekusi sebelum plugin biasa dan tidak akan terhapus saat Anda ganti tema.

  1. Buat file bernama 00-dicky-woocommerce-bulk-failsafe.php di dalam folder /wp-content/mu-plugins/.
    • Jika folder mu-plugins belum ada, buat folder tersebut di dalam /wp-content/.
  2. Salin dan tempel kode berikut ke dalam file tersebut:
<?php
/**
 * Snippet Name: WooCommerce Bulk Action Fail-Safe
 * Description: Forces bulk actions (like 'Edit') to appear for Shop Managers even if other plugins try to unset them.
 * Version: 1.0.0
 * Author: Dicky Ibrohim
 * Author URI: https://www.dickyibrohim.com
 */

// Kita gunakan prioritas sangat tinggi (9999) agar ini berjalan TERAKHIR,
// mengembalikan apa yang mungkin dihapus plugin lain.
add_filter('bulk_actions-woocommerce_page_wc-orders', function ($actions) {

    // 1. Cek User Saat Ini
    $u = wp_get_current_user();
    if (!$u || empty($u->roles)) return $actions;

    // 2. Tentukan Role Target (Sesuaikan jika punya role custom)
    $target_roles = array('shop_manager');
    $is_target = (bool) array_intersect($target_roles, $u->roles);

    // Jika bukan target role, biarkan apa adanya
    if (!$is_target) return $actions;

    // 3. Kondisi Fail-Safe
    // Kalau ada plugin yang bikin array action jadi kosong/rusak, kita reset
    if (!is_array($actions) || empty($actions)) {
        $actions = array();
    }

    // 4. Kembalikan Action Minimal
    // Kita tambahkan action ubah status secara manual.
    // Adanya key di array ini cukup untuk memunculkan kembali UI Checkbox.
    $actions['mark_processing'] = __('Change status to processing', 'woocommerce');
    $actions['mark_completed']  = __('Change status to completed', 'woocommerce');

    return $actions;

}, 9999);

Hasilnya

  1. Checkbox selalu muncul untuk role yang ditargetkan.
  2. Admin tetap normal mengakses semua fitur bawaan.
  3. Tidak perlu mematikan HPOS atau downgrade versi WooCommerce/Plugin apa pun.