protected function process_customer($data)
{
$customer_id = get_current_user_id();
if (!is_user_logged_in() && ($this->is_registration_required() || !empty($data['createaccount']))) {
$username = !empty($data['account_username']) ? $data['account_username'] : '';
$password = !empty($data['account_password']) ? $data['account_password'] : '';
$customer_id = wc_create_new_customer($data['billing_email'], $username, $password);
if (is_wp_error($customer_id)) {
throw new Exception($customer_id->get_error_message());
}
wp_set_current_user($customer_id);
wc_set_customer_auth_cookie($customer_id);
// As we are now logged in, checkout will need to refresh to show logged in data
WC()->session->set('reload_checkout', true);
// Also, recalculate cart totals to reveal any role-based discounts that were unavailable before registering
WC()->cart->calculate_totals();
}
// Add customer info from other fields.
if ($customer_id && apply_filters('woocommerce_checkout_update_customer_data', true, $this)) {
$customer = new WC_Customer($customer_id);
$customer->set_first_name($data['billing_first_name']);
$customer->set_last_name($data['billing_last_name']);
foreach ($data as $key => $value) {
if (is_callable(array($customer, "set_{$key}"))) {
$customer->{"set_{$key}"}($value);
}
}
$customer->save();
}
do_action('woocommerce_checkout_update_user_meta', $customer_id, $data);
}