/** * Create a customer. * * ## OPTIONS * * <email> * : The email address of the customer to create. * * [--<field>=<value>] * : Associative args for the new customer. * * [--porcelain] * : Outputs just the new customer id. * * ## AVAILABLE FIELDS * * These fields are optionally available for create command: * * * username * * password * * first_name * * last_name * * Billing address fields: * * * billing_address.first_name * * billing_address.last_name * * billing_address.company * * billing_address.address_1 * * billing_address.address_2 * * billing_address.city * * billing_address.state * * billing_address.postcode * * billing_address.country * * billing_address.email * * billing_address.phone * * Shipping address fields: * * * shipping_address.first_name * * shipping_address.last_name * * shipping_address.company * * shipping_address.address_1 * * shipping_address.address_2 * * shipping_address.city * * shipping_address.state * * shipping_address.postcode * * shipping_address.country * * ## EXAMPLES * * wp wc customer create new-customer@example.com --first_name=Akeda * * @since 2.5.0 */ public function create($args, $assoc_args) { global $wpdb; try { $porcelain = isset($assoc_args['porcelain']); unset($assoc_args['porcelain']); $assoc_args['email'] = $args[0]; $data = apply_filters('woocommerce_cli_create_customer_data', $this->unflatten_array($assoc_args)); // Sets the username. $data['username'] = !empty($data['username']) ? $data['username'] : ''; // Sets the password. $data['password'] = !empty($data['password']) ? $data['password'] : ''; // Attempts to create the new customer. $id = wc_create_new_customer($data['email'], $data['username'], $data['password']); // Checks for an error in the customer creation. if (is_wp_error($id)) { throw new WC_CLI_Exception($id->get_error_code(), $id->get_error_message()); } // Added customer data. $this->update_customer_data($id, $data); do_action('woocommerce_cli_create_customer', $id, $data); if ($porcelain) { WP_CLI::line($id); } else { WP_CLI::success("Created customer {$id}."); } } catch (WC_CLI_Exception $e) { WP_CLI::error($e->getMessage()); } }
public function create(&$object) { if ('user' === $this->meta_type) { $content_id = wc_create_new_customer($object->get_content(), 'username-' . time(), 'hunter2'); } else { $content_id = wp_insert_post(array('post_title' => $object->get_content())); } if ($content_id) { $object->set_id($content_id); } $object->apply_changes(); }
/** * Method to create a new customer in the database. * * @since 2.7.0 * @param WC_Customer */ public function create(&$customer) { $id = wc_create_new_customer($customer->get_email(), $customer->get_username(), $customer->get_password()); if (is_wp_error($id)) { throw new WC_Data_Exception($id->get_error_code(), $id->get_error_message()); } $customer->set_id($id); $this->update_user_meta($customer); wp_update_user(array('ID' => $customer->get_id(), 'role' => $customer->get_role(), 'display_name' => $customer->get_first_name() . ' ' . $customer->get_last_name())); $wp_user = new WP_User($customer->get_id()); $customer->set_date_created(strtotime($wp_user->user_registered)); $customer->set_date_modified(get_user_meta($customer->get_id(), 'last_update', true)); $customer->save_meta_data(); $customer->apply_changes(); do_action('woocommerce_new_customer', $customer->get_id()); }
/** * Parses the WXR file and prepares us for the task of processing parsed data * * @param string $file Path to the WXR file for importing */ function import_start($file) { global $wpdb; if (!is_file($file)) { echo '<p><strong>' . __('Sorry, there has been an error.', 'wc_customer_relationship_manager') . '</strong><br />'; echo __('The file does not exist, please try again.', 'wc_customer_relationship_manager') . '</p>'; die; } if (in_array('user_email', $_POST['import_options'])) { $this->key_email = array_search('user_email', $_POST['import_options']); } if (empty($this->key_email) && in_array('billing_email', $_POST['import_options'])) { $this->key_email = array_search('billing_email', $_POST['import_options']); } if (empty($this->key_email) && $this->key_email !== 0) { echo '<p><strong>' . __('Sorry, there has been an error.', 'wc_customer_relationship_manager') . '</strong><br />'; echo __('Please select user email and please try again.', 'wc_customer_relationship_manager') . '</p>'; wp_import_cleanup($this->id); wp_cache_flush(); die; } $import_data = $this->parse($file); if (is_wp_error($import_data)) { echo '<p><strong>' . __('Sorry, there has been an error.', 'wc_customer_relationship_manager') . '</strong><br />'; echo esc_html($import_data->get_error_message()) . '</p>'; wp_import_cleanup($this->id); wp_cache_flush(); die; } if (in_array('first_name', $_POST['import_options'])) { $this->key_fname = array_search('first_name', $_POST['import_options']); } if (empty($this->key_fname) && in_array('billing_first_name', $_POST['import_options'])) { $this->key_fname = array_search('billing_first_name', $_POST['import_options']); } if (in_array('last_name', $_POST['import_options'])) { $this->key_lname = array_search('last_name', $_POST['import_options']); } if (empty($this->key_lname) && in_array('billing_last_name', $_POST['import_options'])) { $this->key_lname = array_search('billing_last_name', $_POST['import_options']); } if (in_array('user_nicename', $_POST['import_options'])) { $this->key_nice = array_search('user_nicename', $_POST['import_options']); } if (in_array('user_role', $_POST['import_options'])) { $this->key_role = array_search('user_role', $_POST['import_options']); } if (in_array('customer_status', $_POST['import_options'])) { $this->key_status = array_search('customer_status', $_POST['import_options']); } $skiped = false; while (($data = fgetcsv($import_data, 1000, ",")) !== FALSE) { if (isset($_POST['skip_first']) && $_POST['skip_first'] == 'yes' && !$skiped) { $skiped = true; continue; } $user_email = trim($data[$this->key_email]); if (empty($user_email) || email_exists($user_email)) { $this->not_import[] = $data; continue; } $nickname = ''; if (empty($this->key_nice)) { if (isset($data[$this->key_fname])) { $nickname .= sanitize_title($data[$this->key_fname]); } if (isset($data[$this->key_lname])) { $nickname .= '_' . sanitize_title($data[$this->key_lname]); } } else { $nickname .= sanitize_title($data[$this->key_nice]); } $user_login = ''; if (in_array('user_login', $_POST['import_options'])) { $key = array_search('user_login', $_POST['import_options']); $user_login = $data[$key]; } else { $user_login = $this->get_user_login($user_email, $nickname); } //$password = wp_generate_password(); add_filter('pre_option_woocommerce_registration_generate_password', 'wcrm_enable_generate_password'); $user_id = wc_create_new_customer($user_email, $user_login); remove_filter('pre_option_woocommerce_registration_generate_password', 'wcrm_enable_generate_password'); if (!empty($user_id) && !is_wp_error($user_id)) { if (empty($this->key_role) && isset($_POST['customer_role'])) { wp_update_user(array('ID' => $user_id, 'role' => $_POST['customer_role'])); } if (empty($this->key_status) && isset($_POST['customer_status'])) { $status = $_POST['customer_status']; wc_crm_change_customer_status($status, array($user_id)); } foreach ($_POST['import_options'] as $f_key => $meta_key) { if (empty($meta_key)) { continue; } if ($meta_key == 'user_login' || $meta_key == 'user_email') { continue; } if ($meta_key == 'url') { wp_update_user(array('ID' => $user_id, 'user_url' => $data[$f_key])); continue; } if ($meta_key == 'display_name') { wp_update_user(array('ID' => $user_id, 'display_name' => $data[$f_key])); continue; } if ($meta_key == 'wcrm_custom_meta') { $custom_meta_key = $_POST['import_options_custom_meta'][$f_key]; update_user_meta($user_id, $custom_meta_key, $data[$f_key]); continue; } if ($meta_key == 'user_nicename') { wp_update_user(array('ID' => $user_id, 'user_nicename' => $data[$f_key])); continue; } if ($meta_key == 'user_role') { wp_update_user(array('ID' => $user_id, 'role' => $data[$f_key])); continue; } if ($meta_key == 'customer_status') { $status = $this->check_customer_status($data[$f_key]); if (!$status) { $status = $_POST['customer_status']; } wc_crm_change_customer_status($status, array($user_id)); continue; } if ($meta_key == 'industry') { $industries = wc_crm_get_industries(); if (!in_array($data[$f_key], $industries)) { continue; } } if ($meta_key == 'user_group') { //global $wpdb $groups = $data[$f_key]; $groups = explode(',', $groups); if (!empty($groups)) { $group_ids = array(); foreach ($groups as $group_name) { $group_slug = wc_sanitize_taxonomy_name(stripslashes($group_name)); $group_exists = wc_crm_group_exists($group_slug); if (!$group_exists) { $group = array('group_name' => $group_name, 'group_slug' => $group_slug, 'group_type' => 'static'); $wpdb->insert($wpdb->prefix . 'wc_crm_groups', $group); $group_ids[] = $wpdb->insert_id; $this->groups_added[] = $group_name; do_action('wc_crm_group_added', $wpdb->insert_id, $group); } else { $group_ids[] = $wpdb->get_var($wpdb->prepare("SELECT ID FROM {$wpdb->prefix}wc_crm_groups WHERE group_slug = %s LIMIT 1", $group_slug)); } } wc_crm_update_user_groups($group_ids, $user_email); } continue; } update_user_meta($user_id, $meta_key, $data[$f_key]); } $this->row++; } } }
public static function create_user() { if (empty($_POST['user_email'])) { wc_crm_add_notice(__('Please enter an e-mail address.', 'wc_crm'), 'error'); } elseif (!is_email($_POST['user_email'])) { wc_crm_add_notice(__("The email address isn't correct.", 'wc_crm'), 'error'); } elseif (email_exists($_POST['user_email'])) { wc_crm_add_notice(__("This email is already registered, please choose another one.", 'wc_crm'), 'error'); } if (wc_crm_notice_count('error') > 0) { return; } global $wpdb; $nickname = str_replace(' ', '', ucfirst(strtolower($_POST['first_name']))) . str_replace(' ', '', ucfirst(strtolower($_POST['last_name']))); $username_opt = get_option('wc_crm_username_add_customer'); switch ($username_opt) { case 2: $username = str_replace(' ', '', strtolower($_POST['first_name'])) . '-' . str_replace(' ', '', strtolower($_POST['last_name'])); break; case 3: $username = $_POST['user_email']; break; default: $username = strtolower($nickname); break; } $username = _truncate_post_slug($username, 60); $check_sql = "SELECT user_login FROM {$wpdb->users} WHERE user_login = '******' LIMIT 1"; $user_name_check = $wpdb->get_var($wpdb->prepare($check_sql, $username)); if ($user_name_check) { $suffix = 1; do { $alt_user_name = _truncate_post_slug($username, 60 - (strlen($suffix) + 1)) . "-{$suffix}"; $user_name_check = $wpdb->get_var($wpdb->prepare($check_sql, $alt_user_name)); $suffix++; } while ($user_name_check); $username = $alt_user_name; } add_filter('pre_option_woocommerce_registration_generate_password', 'wcrm_enable_generate_password'); $user_id = wc_create_new_customer($_POST['user_email'], $username); remove_filter('pre_option_woocommerce_registration_generate_password', 'wcrm_enable_generate_password'); do_action('wc_crm_create_customer', $user_id); if (!is_wp_error($user_id)) { update_user_meta($user_id, 'nickname', $nickname); wp_update_user(array('ID' => $user_id, 'role' => 'customer')); $customer_id = $wpdb->get_var("SELECT c_id FROM {$wpdb->prefix}wc_crm_customer_list WHERE user_id = {$user_id} "); if ($customer_id) { WC_CRM_Screen_Customers_Edit::save($customer_id, true); } wc_crm_add_notice(__("Customer created.", 'wc_crm'), 'success'); wp_safe_redirect(admin_url() . 'admin.php?page=' . WC_CRM_TOKEN); } else { wc_crm_add_notice($user_id->get_error_message(), 'error'); } }
function create_user() { global $wpdb; extract($_POST); $user_email = trim($user_email); if (empty($user_email)) { $this->error[] = __('<p><strong>ERROR</strong>: The email address isn’t correct.</p>'); } else { if (!email_exists($user_email)) { //$random_password = wp_generate_password( $length=12, $include_standard_special_chars=false ); $nickname = str_replace(' ', '', ucfirst(strtolower($_POST['first_name']))) . str_replace(' ', '', ucfirst(strtolower($_POST['last_name']))); $username_opt = get_option('woocommerce_crm_username_add_customer'); switch ($username_opt) { case 2: $username = str_replace(' ', '', strtolower($_POST['first_name'])) . '-' . str_replace(' ', '', strtolower($_POST['last_name'])); break; case 3: $username = $user_email; break; default: $username = strtolower($nickname); break; } $username = _truncate_post_slug($username, 60); $check_sql = "SELECT user_login FROM {$wpdb->users} WHERE user_login = '******' LIMIT 1"; $user_name_check = $wpdb->get_var($wpdb->prepare($check_sql, $username)); if ($user_name_check) { $suffix = 1; do { $alt_user_name = _truncate_post_slug($username, 60 - (strlen($suffix) + 1)) . "-{$suffix}"; $user_name_check = $wpdb->get_var($wpdb->prepare($check_sql, $alt_user_name)); $suffix++; } while ($user_name_check); $username = $alt_user_name; } add_filter('pre_option_woocommerce_registration_generate_password', 'wcrm_enable_generate_password'); $user_id = wc_create_new_customer($user_email, $username); remove_filter('pre_option_woocommerce_registration_generate_password', 'wcrm_enable_generate_password'); do_action('wc_crm_create_customer', $user_id); $this->save($user_id, true); if (!is_wp_error($user_id)) { update_user_meta($user_id, 'nickname', $nickname); wp_update_user(array('ID' => $user_id, 'role' => 'customer')); } } else { $errors = new WP_Error(); $errors->add('invalid_email', __('<strong>ERROR</strong>: User already exists.'), array('form-field' => 'user_email')); $_SESSION['customer_save_errors'] = $errors; } } }
/** * Create a customer. * @since 2.7.0. */ public function create() { $customer_id = wc_create_new_customer($this->get_email(), $this->get_username(), $this->password); if (!is_wp_error($customer_id)) { $this->set_id($customer_id); $this->update_post_meta(); wp_update_user(array('ID' => $this->get_id(), 'role' => $this->get_role())); $wp_user = new WP_User($this->get_id()); $this->set_date_created(strtotime($wp_user->user_registered)); $this->set_date_modified(get_user_meta($this->get_id(), 'last_update', true)); $this->read_meta_data(); } }
/** * Process the registration form. */ public function process_registration() { if (!empty($_POST['register'])) { wp_verify_nonce($_POST['register'], 'woocommerce-register'); if ('no' === get_option('woocommerce_registration_generate_username')) { $_username = $_POST['username']; } else { $_username = ''; } if ('no' === get_option('woocommerce_registration_generate_password')) { $_password = $_POST['password']; } else { $_password = ''; } try { $validation_error = new WP_Error(); $validation_error = apply_filters('woocommerce_process_registration_errors', $validation_error, $_username, $_password, $_POST['email']); if ($validation_error->get_error_code()) { throw new Exception('<strong>' . __('Error', 'woocommerce') . ':</strong> ' . $validation_error->get_error_message()); } } catch (Exception $e) { wc_add_notice($e->getMessage(), 'error'); return; } $username = !empty($_username) ? wc_clean($_username) : ''; $email = !empty($_POST['email']) ? sanitize_email($_POST['email']) : ''; $password = $_password; // Anti-spam trap if (!empty($_POST['email_2'])) { wc_add_notice('<strong>' . __('ERROR', 'woocommerce') . '</strong>: ' . __('Anti-spam field was filled in.', 'woocommerce'), 'error'); return; } $new_customer = wc_create_new_customer($email, $username, $password); if (is_wp_error($new_customer)) { wc_add_notice($new_customer->get_error_message(), 'error'); return; } wc_set_customer_auth_cookie($new_customer); // Redirect if (wp_get_referer()) { $redirect = esc_url(wp_get_referer()); } else { $redirect = esc_url(get_permalink(wc_get_page_id('myaccount'))); } wp_redirect(apply_filters('woocommerce_registration_redirect', $redirect)); exit; } }
/** * Create a single customer. * * @param WP_REST_Request $request Full details about the request. * @return WP_Error|WP_REST_Response */ public function create_item($request) { if (!empty($request['id'])) { return new WP_Error('woocommerce_rest_customer_exists', __('Cannot create existing resource.', 'woocommerce'), array('status' => 400)); } // Sets the username. $request['username'] = !empty($request['username']) ? $request['username'] : ''; // Sets the password. $request['password'] = !empty($request['password']) ? $request['password'] : ''; // Create customer. $customer_id = wc_create_new_customer($request['email'], $request['username'], $request['password']); if (is_wp_error($customer_id)) { return $customer_id; } $customer = get_user_by('id', $customer_id); $this->update_additional_fields_for_object($customer, $request); // Add customer data. $this->update_customer_meta_fields($customer, $request); /** * Fires after a customer is created or updated via the REST API. * * @param WP_User $customer Data used to create the customer. * @param WP_REST_Request $request Request object. * @param boolean $creating True when creating customer, false when updating customer. */ do_action('woocommerce_rest_insert_customer', $customer, $request, true); $request->set_param('context', 'edit'); $response = $this->prepare_item_for_response($customer, $request); $response = rest_ensure_response($response); $response->set_status(201); $response->header('Location', rest_url(sprintf('/%s/%s/%d', $this->namespace, $this->rest_base, $customer_id))); return $response; }
/** * Create a customer. * @since 2.7.0. */ public function create() { $customer_id = wc_create_new_customer($this->get_email(), $this->get_username(), $this->password); if (!is_wp_error($customer_id)) { $this->set_id($customer_id); update_user_meta($this->get_id(), 'billing_first_name', $this->get_billing_first_name()); update_user_meta($this->get_id(), 'billing_last_name', $this->get_billing_last_name()); update_user_meta($this->get_id(), 'billing_company', $this->get_billing_company()); update_user_meta($this->get_id(), 'billing_phone', $this->get_billing_phone()); update_user_meta($this->get_id(), 'billing_email', $this->get_billing_email()); update_user_meta($this->get_id(), 'billing_postcode', $this->get_billing_postcode()); update_user_meta($this->get_id(), 'billing_city', $this->get_billing_city()); update_user_meta($this->get_id(), 'billing_address_1', $this->get_billing_address()); update_user_meta($this->get_id(), 'billing_address_2', $this->get_billing_address_2()); update_user_meta($this->get_id(), 'billing_state', $this->get_billing_state()); update_user_meta($this->get_id(), 'billing_country', $this->get_billing_country()); update_user_meta($this->get_id(), 'shipping_first_name', $this->get_shipping_first_name()); update_user_meta($this->get_id(), 'shipping_last_name', $this->get_shipping_last_name()); update_user_meta($this->get_id(), 'shipping_company', $this->get_shipping_company()); update_user_meta($this->get_id(), 'shipping_postcode', $this->get_shipping_postcode()); update_user_meta($this->get_id(), 'shipping_city', $this->get_shipping_city()); update_user_meta($this->get_id(), 'shipping_address_1', $this->get_shipping_address()); update_user_meta($this->get_id(), 'shipping_address_2', $this->get_shipping_address_2()); update_user_meta($this->get_id(), 'shipping_state', $this->get_shipping_state()); update_user_meta($this->get_id(), 'shipping_country', $this->get_shipping_country()); update_user_meta($this->get_id(), 'paying_customer', $this->get_is_paying_customer()); update_user_meta($this->get_id(), 'last_update', $this->get_date_modified()); update_user_meta($this->get_id(), 'first_name', $this->get_first_name()); update_user_meta($this->get_id(), 'last_name', $this->get_last_name()); wp_update_user(array('ID' => $this->get_id(), 'role' => $this->get_role())); $wp_user = new WP_User($this->get_id()); $this->set_date_created(strtotime($wp_user->user_registered)); $this->set_date_modified(get_user_meta($this->get_id(), 'last_update', true)); $this->read_meta_data(); } }
/** * Create a customer * * Based on WC_API_Customers::create_customer * * @since 3.0.0 * @param array $data * @param array $options * @return int|WP_Error */ public function create_customer($data, $options) { try { /** * Filter new customer data from CSV * * @since 3.0.0 * @param array $data * @param array $options * @param object $this */ $data = apply_filters('wc_csv_import_suite_create_customer_data', $data, $options, $this); // checks if the email is missing. if (!isset($data['email'])) { throw new WC_CSV_Import_Suite_Import_Exception('wc_csv_import_suite_missing_customer_email', sprintf(__('Missing parameter %s', 'woocommerce-csv-import-suite'), 'email')); } // sets the username. $data['username'] = !empty($data['username']) ? $data['username'] : ''; // sets the password. $data['password'] = !empty($data['password']) ? $data['password'] : ''; // force generate the password if not provided if (!$data['password']) { add_filter('pre_option_woocommerce_registration_generate_password', array($this, 'force_password_generation'), 1); } // enable/disable new customer emails $send_welcome_emails = isset($options['send_welcome_emails']) && $options['send_welcome_emails']; $enabled = $send_welcome_emails ? '__return_true' : '__return_false'; add_filter('woocommerce_email_enabled_customer_new_account', $enabled, 1000); // attempts to create the new customer $id = wc_create_new_customer($data['email'], $data['username'], $data['password']); // remove send_welcome_emails filter remove_filter('woocommerce_email_enabled_customer_new_account', $enabled, 1000); // remove forced password generation if (!$data['password']) { remove_filter('pre_option_woocommerce_registration_generate_password', array($this, 'force_password_generation'), 1); } // checks for an error in the customer creation. if (is_wp_error($id)) { throw new WC_CSV_Import_Suite_Import_Exception($id->get_error_code(), $id->get_error_message()); } // update customer data. $this->update_customer_data($id, $data, $options); /** * Triggered after a customer has been created via CSV import * * @since 3.0.0 * @param int $id Customer ID * @param array $data Data from CSV * @param array $options Import options */ do_action('wc_csv_import_suite_create_customer', $id, $data, $options); return $id; } catch (WC_CSV_Import_Suite_Import_Exception $e) { return new WP_Error($e->getErrorCode(), $e->getMessage()); } }
/** * Create a customer * * @since 2.2 * @param array $data * @return array */ public function create_customer($data) { $data = isset($data['customer']) ? $data['customer'] : array(); // Checks with can create new users. if (!current_user_can('create_users')) { return new WP_Error('woocommerce_api_user_cannot_create_customer', __('You do not have permission to create this customer', 'woocommerce'), array('status' => 401)); } $data = apply_filters('woocommerce_api_create_customer_data', $data, $this); // Checks with the email is missing. if (!isset($data['email'])) { return new WP_Error('woocommerce_api_missing_customer_email', sprintf(__('Missing parameter %s', 'woocommerce'), 'email'), array('status' => 400)); } // Sets the username. if (!isset($data['username'])) { $data['username'] = ''; } // Sets the password. if (!isset($data['password'])) { $data['password'] = wp_generate_password(); } // Attempts to create the new customer $id = wc_create_new_customer($data['email'], $data['username'], $data['password']); // Checks for an error in the customer creation. if (is_wp_error($id)) { return new WP_Error('woocommerce_api_cannot_create_customer', $id->get_error_message(), array('status' => 400)); } // Added customer data. $this->update_customer_data($id, $data); do_action('woocommerce_api_create_customer', $id, $data); $this->server->send_status(201); return $this->get_customer($id); }
/** * Process the registration form. */ public static function process_registration() { $nonce_value = isset($_POST['_wpnonce']) ? $_POST['_wpnonce'] : ''; $nonce_value = isset($_POST['woocommerce-register-nonce']) ? $_POST['woocommerce-register-nonce'] : $nonce_value; if (!empty($_POST['register']) && wp_verify_nonce($nonce_value, 'woocommerce-register')) { $username = '******' === get_option('woocommerce_registration_generate_username') ? $_POST['username'] : ''; $password = '******' === get_option('woocommerce_registration_generate_password') ? $_POST['password'] : ''; $email = $_POST['email']; try { $validation_error = new WP_Error(); $validation_error = apply_filters('woocommerce_process_registration_errors', $validation_error, $username, $password, $email); if ($validation_error->get_error_code()) { throw new Exception($validation_error->get_error_message()); } // Anti-spam trap if (!empty($_POST['email_2'])) { throw new Exception(__('Anti-spam field was filled in.', 'woocommerce')); } $new_customer = wc_create_new_customer(sanitize_email($email), wc_clean($username), $password); if (is_wp_error($new_customer)) { throw new Exception($new_customer->get_error_message()); } if (apply_filters('woocommerce_registration_auth_new_customer', true, $new_customer)) { wc_set_customer_auth_cookie($new_customer); } wp_safe_redirect(apply_filters('woocommerce_registration_redirect', wp_get_referer() ? wp_get_referer() : wc_get_page_permalink('myaccount'))); exit; } catch (Exception $e) { wc_add_notice('<strong>' . __('Error:', 'woocommerce') . '</strong> ' . $e->getMessage(), 'error'); } } }
/** * @deprecated */ function woocommerce_create_new_customer($email, $username = '', $password = '') { return wc_create_new_customer($email, $username, $password); }
/** * Process the checkout after the confirm order button is pressed * * @access public * @return void */ public function process_checkout() { global $wpdb, $current_user; wp_verify_nonce($_POST['_wpnonce'], 'woocommerce-process_checkout'); if (!defined('WOOCOMMERCE_CHECKOUT')) { define('WOOCOMMERCE_CHECKOUT', true); } // Prevent timeout @set_time_limit(0); do_action('woocommerce_before_checkout_process'); if (sizeof(WC()->cart->get_cart()) == 0) { wc_add_notice(sprintf(__('Sorry, your session has expired. <a href="%s" class="wc-backward">Return to homepage</a>', 'woocommerce'), home_url()), 'error'); } do_action('woocommerce_checkout_process'); // Checkout fields (not defined in checkout_fields) $this->posted['terms'] = isset($_POST['terms']) ? 1 : 0; $this->posted['createaccount'] = isset($_POST['createaccount']) ? 1 : 0; $this->posted['payment_method'] = isset($_POST['payment_method']) ? stripslashes($_POST['payment_method']) : ''; $this->posted['shipping_method'] = isset($_POST['shipping_method']) ? $_POST['shipping_method'] : ''; $this->posted['ship_to_different_address'] = isset($_POST['ship_to_different_address']) ? true : false; if (isset($_POST['shiptobilling'])) { _deprecated_argument('WC_Checkout::process_checkout()', '2.1', 'The "shiptobilling" field is deprecated. THe template files are out of date'); $this->posted['ship_to_different_address'] = $_POST['shiptobilling'] ? false : true; } // Ship to billing only option if (WC()->cart->ship_to_billing_address_only()) { $this->posted['ship_to_different_address'] = false; } // Update customer shipping and payment method to posted method $chosen_shipping_methods = WC()->session->get('chosen_shipping_methods'); if (isset($this->posted['shipping_method']) && is_array($this->posted['shipping_method'])) { foreach ($this->posted['shipping_method'] as $i => $value) { $chosen_shipping_methods[$i] = wc_clean($value); } } WC()->session->set('chosen_shipping_methods', $chosen_shipping_methods); WC()->session->set('chosen_payment_method', $this->posted['payment_method']); // Note if we skip shipping $skipped_shipping = false; // Get posted checkout_fields and do validation foreach ($this->checkout_fields as $fieldset_key => $fieldset) { // Skip shipping if not needed if ($fieldset_key == 'shipping' && ($this->posted['ship_to_different_address'] == false || !WC()->cart->needs_shipping())) { $skipped_shipping = true; continue; } // Ship account if not needed if ($fieldset_key == 'account' && (is_user_logged_in() || $this->must_create_account == false && empty($this->posted['createaccount']))) { continue; } foreach ($fieldset as $key => $field) { if (!isset($field['type'])) { $field['type'] = 'text'; } // Get Value switch ($field['type']) { case "checkbox": $this->posted[$key] = isset($_POST[$key]) ? 1 : 0; break; case "multiselect": $this->posted[$key] = isset($_POST[$key]) ? implode(', ', array_map('wc_clean', $_POST[$key])) : ''; break; case "textarea": $this->posted[$key] = isset($_POST[$key]) ? wp_strip_all_tags(wp_check_invalid_utf8(stripslashes($_POST[$key]))) : ''; break; default: $this->posted[$key] = isset($_POST[$key]) ? wc_clean($_POST[$key]) : ''; break; } // Hooks to allow modification of value $this->posted[$key] = apply_filters('woocommerce_process_checkout_' . sanitize_title($field['type']) . '_field', $this->posted[$key]); $this->posted[$key] = apply_filters('woocommerce_process_checkout_field_' . $key, $this->posted[$key]); // Validation: Required fields if (isset($field['required']) && $field['required'] && empty($this->posted[$key])) { wc_add_notice('<strong>' . $field['label'] . '</strong> ' . __('is a required field.', 'woocommerce'), 'error'); } if (!empty($this->posted[$key])) { // Validation rules if (!empty($field['validate']) && is_array($field['validate'])) { foreach ($field['validate'] as $rule) { switch ($rule) { case 'postcode': $this->posted[$key] = strtoupper(str_replace(' ', '', $this->posted[$key])); if (!WC_Validation::is_postcode($this->posted[$key], $_POST[$fieldset_key . '_country'])) { wc_add_notice(__('Please enter a valid postcode/ZIP.', 'woocommerce'), 'error'); } else { $this->posted[$key] = wc_format_postcode($this->posted[$key], $_POST[$fieldset_key . '_country']); } break; case 'phone': $this->posted[$key] = wc_format_phone_number($this->posted[$key]); if (!WC_Validation::is_phone($this->posted[$key])) { wc_add_notice('<strong>' . $field['label'] . '</strong> ' . __('is not a valid phone number.', 'woocommerce'), 'error'); } break; case 'email': $this->posted[$key] = strtolower($this->posted[$key]); if (!is_email($this->posted[$key])) { wc_add_notice('<strong>' . $field['label'] . '</strong> ' . __('is not a valid email address.', 'woocommerce'), 'error'); } break; case 'state': // Get valid states $valid_states = WC()->countries->get_states($_POST[$fieldset_key . '_country']); if ($valid_states) { $valid_state_values = array_flip(array_map('strtolower', $valid_states)); } // Convert value to key if set if (isset($valid_state_values[strtolower($this->posted[$key])])) { $this->posted[$key] = $valid_state_values[strtolower($this->posted[$key])]; } // Only validate if the country has specific state options if ($valid_states && sizeof($valid_states) > 0) { if (!in_array($this->posted[$key], array_keys($valid_states))) { wc_add_notice('<strong>' . $field['label'] . '</strong> ' . __('is not valid. Please enter one of the following:', 'woocommerce') . ' ' . implode(', ', $valid_states), 'error'); } } break; } } } } } } // Update customer location to posted location so we can correctly check available shipping methods if (isset($this->posted['billing_country'])) { WC()->customer->set_country($this->posted['billing_country']); } if (isset($this->posted['billing_state'])) { WC()->customer->set_state($this->posted['billing_state']); } if (isset($this->posted['billing_postcode'])) { WC()->customer->set_postcode($this->posted['billing_postcode']); } // Shipping Information if (!$skipped_shipping) { // Update customer location to posted location so we can correctly check available shipping methods if (isset($this->posted['shipping_country'])) { WC()->customer->set_shipping_country($this->posted['shipping_country']); } if (isset($this->posted['shipping_state'])) { WC()->customer->set_shipping_state($this->posted['shipping_state']); } if (isset($this->posted['shipping_postcode'])) { WC()->customer->set_shipping_postcode($this->posted['shipping_postcode']); } } else { // Update customer location to posted location so we can correctly check available shipping methods if (isset($this->posted['billing_country'])) { WC()->customer->set_shipping_country($this->posted['billing_country']); } if (isset($this->posted['billing_state'])) { WC()->customer->set_shipping_state($this->posted['billing_state']); } if (isset($this->posted['billing_postcode'])) { WC()->customer->set_shipping_postcode($this->posted['billing_postcode']); } } // Update cart totals now we have customer address WC()->cart->calculate_totals(); // Terms if (!isset($_POST['woocommerce_checkout_update_totals']) && empty($this->posted['terms']) && wc_get_page_id('terms') > 0) { wc_add_notice(__('You must accept our Terms & Conditions.', 'woocommerce'), 'error'); } if (WC()->cart->needs_shipping()) { if (!in_array(WC()->customer->get_shipping_country(), array_keys(WC()->countries->get_shipping_countries()))) { wc_add_notice(sprintf(__('Unfortunately <strong>we do not ship to %s</strong>. Please enter an alternative shipping address.', 'woocommerce'), WC()->countries->shipping_to_prefix() . ' ' . WC()->customer->get_shipping_country()), 'error'); } // Validate Shipping Methods $packages = WC()->shipping->get_packages(); $this->shipping_methods = WC()->session->get('chosen_shipping_methods'); foreach ($packages as $i => $package) { if (!isset($package['rates'][$this->shipping_methods[$i]])) { wc_add_notice(__('Invalid shipping method.', 'woocommerce'), 'error'); $this->shipping_methods[$i] = ''; } } } if (WC()->cart->needs_payment()) { // Payment Method $available_gateways = WC()->payment_gateways->get_available_payment_gateways(); if (!isset($available_gateways[$this->posted['payment_method']])) { $this->payment_method = ''; wc_add_notice(__('Invalid payment method.', 'woocommerce'), 'error'); } else { $this->payment_method = $available_gateways[$this->posted['payment_method']]; $this->payment_method->validate_fields(); } } // Action after validation do_action('woocommerce_after_checkout_validation', $this->posted); if (!isset($_POST['woocommerce_checkout_update_totals']) && wc_notice_count('error') == 0) { try { // Customer accounts $this->customer_id = apply_filters('woocommerce_checkout_customer_id', get_current_user_id()); if (!is_user_logged_in() && ($this->must_create_account || !empty($this->posted['createaccount']))) { $username = !empty($this->posted['account_username']) ? $this->posted['account_username'] : ''; $password = !empty($this->posted['account_password']) ? $this->posted['account_password'] : ''; $new_customer = wc_create_new_customer($this->posted['billing_email'], $username, $password); if (is_wp_error($new_customer)) { throw new Exception($new_customer->get_error_message()); } $this->customer_id = $new_customer; wc_set_customer_auth_cookie($this->customer_id); // As we are now logged in, checkout will need to refresh to show logged in data WC()->session->set('reload_checkout', true); // Add customer info from other billing fields if ($this->posted['billing_first_name'] && apply_filters('woocommerce_checkout_update_customer_data', true, $this)) { $userdata = array('ID' => $this->customer_id, 'first_name' => $this->posted['billing_first_name'] ? $this->posted['billing_first_name'] : '', 'last_name' => $this->posted['billing_last_name'] ? $this->posted['billing_last_name'] : '', 'display_name' => $this->posted['billing_first_name'] ? $this->posted['billing_first_name'] : ''); wp_update_user(apply_filters('woocommerce_checkout_customer_userdata', $userdata, $this)); } } // Do a final stock check at this point $this->check_cart_items(); // Abort if errors are present if (wc_notice_count('error') > 0) { throw new Exception(); } $order_id = $this->create_order(); do_action('woocommerce_checkout_order_processed', $order_id, $this->posted); // Process payment if (WC()->cart->needs_payment()) { // Store Order ID in session so it can be re-used after payment failure WC()->session->order_awaiting_payment = $order_id; // Process Payment $result = $available_gateways[$this->posted['payment_method']]->process_payment($order_id); // Redirect to success/confirmation/payment page if ($result['result'] == 'success') { $result = apply_filters('woocommerce_payment_successful_result', $result, $order_id); if (is_ajax()) { echo '<!--WC_START-->' . json_encode($result) . '<!--WC_END-->'; exit; } else { wp_redirect($result['redirect']); exit; } } } else { if (empty($order)) { $order = new WC_Order($order_id); } // No payment was required for order $order->payment_complete(); // Empty the Cart WC()->cart->empty_cart(); // Get redirect $return_url = $order->get_checkout_order_received_url(); // Redirect to success/confirmation/payment page if (is_ajax()) { echo '<!--WC_START-->' . json_encode(array('result' => 'success', 'redirect' => apply_filters('woocommerce_checkout_no_payment_needed_redirect', $return_url, $order))) . '<!--WC_END-->'; exit; } else { wp_safe_redirect(apply_filters('woocommerce_checkout_no_payment_needed_redirect', $return_url, $order)); exit; } } } catch (Exception $e) { if (!empty($e)) { wc_add_notice($e->getMessage(), 'error'); } } } // endif // If we reached this point then there were errors if (is_ajax()) { ob_start(); wc_print_notices(); $messages = ob_get_clean(); echo '<!--WC_START-->' . json_encode(array('result' => 'failure', 'messages' => $messages, 'refresh' => isset(WC()->session->refresh_totals) ? 'true' : 'false', 'reload' => isset(WC()->session->reload_checkout) ? 'true' : 'false')) . '<!--WC_END-->'; unset(WC()->session->refresh_totals, WC()->session->reload_checkout); exit; } }
/** * Create a customer * * @since 2.2 * @param array $data * @return array */ public function create_customer($data) { try { if (!isset($data['customer'])) { throw new WC_API_Exception('woocommerce_api_missing_customer_data', sprintf(__('No %1$s data specified to create %1$s', 'woocommerce'), 'customer'), 400); } $data = $data['customer']; // Checks with can create new users. if (!current_user_can('create_users')) { throw new WC_API_Exception('woocommerce_api_user_cannot_create_customer', __('You do not have permission to create this customer', 'woocommerce'), 401); } $data = apply_filters('woocommerce_api_create_customer_data', $data, $this); // Checks with the email is missing. if (!isset($data['email'])) { throw new WC_API_Exception('woocommerce_api_missing_customer_email', sprintf(__('Missing parameter %s', 'woocommerce'), 'email'), 400); } // Sets the username. $data['username'] = !empty($data['username']) ? $data['username'] : ''; // Sets the password. $data['password'] = !empty($data['password']) ? $data['password'] : ''; // Attempts to create the new customer $id = wc_create_new_customer($data['email'], $data['username'], $data['password']); // Checks for an error in the customer creation. if (is_wp_error($id)) { throw new WC_API_Exception($id->get_error_code(), $id->get_error_message(), 400); } // Added customer data. $this->update_customer_data($id, $data); do_action('woocommerce_api_create_customer', $id, $data); $this->server->send_status(201); return $this->get_customer($id); } catch (WC_API_Exception $e) { return new WP_Error($e->getErrorCode(), $e->getMessage(), array('status' => $e->getCode())); } }
/** * Simple create. */ public function create() { if ('user' === $this->_meta_type) { $content_id = wc_create_new_customer($this->get_content(), 'username-' . time(), 'hunter2'); } else { $content_id = wp_insert_post(array('post_title' => $this->get_content())); } if ($content_id) { $this->_data['id'] = $content_id; } }
/** * Regular checkout process */ function regular_checkout($posted) { if ($posted['payment_method'] == 'paypal_express' && wc_notice_count('error') == 0) { if (!is_user_logged_in() && (get_option('woocommerce_enable_guest_checkout') != 'yes' || isset($posted['createaccount']) && $posted['createaccount'] == 1)) { $this->customer_id = apply_filters('woocommerce_checkout_customer_id', get_current_user_id()); $username = !empty($posted['account_username']) ? $posted['account_username'] : ''; $password = !empty($posted['account_password']) ? $posted['account_password'] : ''; $new_customer = wc_create_new_customer($posted['billing_email'], $username, $password); if (is_wp_error($new_customer)) { throw new Exception($new_customer->get_error_message()); } $this->customer_id = $new_customer; wc_set_customer_auth_cookie($this->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 billing fields if ($posted['billing_first_name'] && apply_filters('woocommerce_checkout_update_customer_data', true, $this)) { $userdata = array('ID' => $this->customer_id, 'first_name' => $posted['billing_first_name'] ? $posted['billing_first_name'] : '', 'last_name' => $posted['billing_last_name'] ? $posted['billing_last_name'] : '', 'display_name' => $posted['billing_first_name'] ? $posted['billing_first_name'] : ''); wp_update_user(apply_filters('woocommerce_checkout_customer_userdata', $userdata, $this)); } } $this->set_session('checkout_form', serialize($posted)); $this->paypal_express_checkout($posted); return; } }
/** * Create a new customer account if needed. * @param array $data * @throws Exception */ 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); }
private function get_user_id_by_login($login) { $customerId = get_user_by("login", $login); if (!$customerId) { $password = wp_generate_password(); $customerId = wc_create_new_customer($login, wc_clean($login), $password); } else { $customerId = $customerId->data->ID; } return $customerId; }