diff --git a/includes/Api/CheckoutController.php b/includes/Api/CheckoutController.php index 96e4df1..8459001 100644 --- a/includes/Api/CheckoutController.php +++ b/includes/Api/CheckoutController.php @@ -262,6 +262,60 @@ class CheckoutController { update_user_meta($user_id, 'billing_email', sanitize_email($billing['email'])); } } + } else { + // Guest checkout - check if auto-register is enabled + $customer_settings = \WooNooW\Compat\CustomerSettingsProvider::get_settings(); + $auto_register = $customer_settings['auto_register_members'] ?? false; + + if ($auto_register && !empty($payload['billing']['email'])) { + $email = sanitize_email($payload['billing']['email']); + + // Check if user already exists + $existing_user = get_user_by('email', $email); + + if ($existing_user) { + // User exists - link order to them + $order->set_customer_id($existing_user->ID); + } else { + // Create new user account + $password = wp_generate_password(12, true, true); + + $userdata = [ + 'user_login' => $email, + 'user_email' => $email, + 'user_pass' => $password, + 'first_name' => sanitize_text_field($payload['billing']['first_name'] ?? ''), + 'last_name' => sanitize_text_field($payload['billing']['last_name'] ?? ''), + 'display_name' => trim((sanitize_text_field($payload['billing']['first_name'] ?? '') . ' ' . sanitize_text_field($payload['billing']['last_name'] ?? ''))) ?: $email, + 'role' => 'customer', // WooCommerce customer role + ]; + + $new_user_id = wp_insert_user($userdata); + + if (!is_wp_error($new_user_id)) { + // Link order to new user + $order->set_customer_id($new_user_id); + + // Set WooCommerce customer billing data + $customer = new \WC_Customer($new_user_id); + + if (!empty($payload['billing']['first_name'])) $customer->set_billing_first_name(sanitize_text_field($payload['billing']['first_name'])); + if (!empty($payload['billing']['last_name'])) $customer->set_billing_last_name(sanitize_text_field($payload['billing']['last_name'])); + if (!empty($payload['billing']['email'])) $customer->set_billing_email(sanitize_email($payload['billing']['email'])); + if (!empty($payload['billing']['phone'])) $customer->set_billing_phone(sanitize_text_field($payload['billing']['phone'])); + if (!empty($payload['billing']['address_1'])) $customer->set_billing_address_1(sanitize_text_field($payload['billing']['address_1'])); + if (!empty($payload['billing']['city'])) $customer->set_billing_city(sanitize_text_field($payload['billing']['city'])); + if (!empty($payload['billing']['state'])) $customer->set_billing_state(sanitize_text_field($payload['billing']['state'])); + if (!empty($payload['billing']['postcode'])) $customer->set_billing_postcode(sanitize_text_field($payload['billing']['postcode'])); + if (!empty($payload['billing']['country'])) $customer->set_billing_country(sanitize_text_field($payload['billing']['country'])); + + $customer->save(); + + // Send new account email (WooCommerce will handle this automatically via hook) + do_action('woocommerce_created_customer', $new_user_id, $userdata, $password); + } + } + } } // Add items