Tùy Chỉnh Trường Thanh Toán WooCommerce: Xóa, Đổi Tên và tuỳ chỉnh Theo Loại Sản Phẩm

// Thay đổi tên và placeholder của trường tên trong thanh toán
add_filter('woocommerce_checkout_fields', 'ced_rename_checkout_fields');
function ced_rename_checkout_fields($fields) {
    $fields['billing']['billing_first_name']['placeholder'] = 'Name';
    $fields['billing']['billing_first_name']['label'] = 'Name';
    $fields['billing']['billing_first_name']['class'] = array('form-row-wide');
    return $fields;
}

// Xóa một số trường không cần thiết trong biểu mẫu thanh toán
add_filter('woocommerce_billing_fields', 'wpb_custom_billing_fields');
function wpb_custom_billing_fields($fields) {
    unset($fields['billing_last_name']);
    unset($fields['billing_company']);
    unset($fields['billing_address_1']);
    unset($fields['billing_address_2']);
    unset($fields['billing_state']);
    unset($fields['billing_city']);
    unset($fields['billing_phone']);
    unset($fields['billing_postcode']);
    unset($fields['billing_country']);
    return $fields;
}

// Xóa một số trường từ biểu mẫu thanh toán
add_filter('woocommerce_checkout_fields', 'custom_override_checkout_fields_ek', 99);
function custom_override_checkout_fields_ek($fields) {
    unset($fields['billing']['billing_company']);
    unset($fields['billing']['billing_address_1']);
    unset($fields['billing']['billing_postcode']);
    unset($fields['billing']['billing_state']);
    return $fields;
}

// Xóa các trường thanh toán nếu tất cả sản phẩm là ảo
add_filter('woocommerce_checkout_fields', 'virtual_products_less_fields');
function virtual_products_less_fields($fields) {
    $all_virtual = true;

    // Kiểm tra nếu tất cả các sản phẩm trong giỏ hàng đều là ảo
    foreach (WC()->cart->get_cart() as $cart_item) {
        if (!$cart_item['data']->is_virtual()) {
            $all_virtual = false;
            break;
        }
    }

    // Nếu tất cả sản phẩm là ảo, xóa các trường không cần thiết
    if ($all_virtual) {
        unset($fields['billing']['billing_company']);
        unset($fields['billing']['billing_address_1']);
        unset($fields['billing']['billing_address_2']);
        unset($fields['billing']['billing_city']);
        unset($fields['billing']['billing_postcode']);
        unset($fields['billing']['billing_country']);
        unset($fields['billing']['billing_state']);
        unset($fields['billing']['billing_phone']);
    }

    return $fields;
}