Created
October 30, 2025 04:19
-
-
Save TanvirHasan19/596acfef79d2ee6710159d9df579fccf to your computer and use it in GitHub Desktop.
Adds a username field to WC Vendors Signup and uses it when creating the user.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| /** | |
| * Username Field | |
| * Description: Adds a username field to WC Vendors Signup and uses it when creating the user. | |
| */ | |
| defined( 'ABSPATH' ) || exit; | |
| add_filter( 'wcv_signup_form_config', function( $config ) { | |
| $config = is_array( $config ) ? $config : array(); | |
| $has_core_username = array_key_exists( 'username', $config ); | |
| $has_custom_username = array_key_exists( 'wcv_cf_username', $config ); | |
| // If both exist somehow, keep the admin/custom one and remove the core one to avoid duplicates. | |
| if ( $has_core_username && $has_custom_username ) { | |
| unset( $config['username'] ); | |
| $has_core_username = false; | |
| } | |
| // If neither exists, add a custom (builder-manageable) username field with sane defaults. | |
| if ( ! $has_core_username && ! $has_custom_username ) { | |
| $config['wcv_cf_username'] = array( | |
| 'type' => 'text', | |
| 'label' => __( 'Username', 'wc-vendors-signup' ), | |
| 'required' => true, // default; admin toggle can change later | |
| 'deletable' => false, // prevent accidental removal if you prefer | |
| 'editable' => true, | |
| 'order' => 1, // default position; we do not reorder other fields | |
| 'enabled' => true, // default; admin toggle can change later | |
| 'placeholder' => __( 'Choose a username', 'wc-vendors-signup' ), | |
| 'is_default' => false, // it’s a custom field, not a built-in default | |
| 'show_on_checkout' => false, | |
| ); | |
| } | |
| return $config; | |
| }, 5 ); | |
| function wcv_signup_get_username_field_key() { | |
| $config = apply_filters( 'wcv_signup_form_config', get_option( 'wcv_signup_form_config', array() ) ); | |
| // Prefer custom if present. | |
| if ( isset( $config['wcv_cf_username'] ) && ! empty( $config['wcv_cf_username']['enabled'] ) ) { | |
| return 'wcv_cf_username'; | |
| } | |
| // Fallback to legacy/core if present (we also cleaned this up above, but keep fallback just in case). | |
| if ( isset( $config['username'] ) && ! empty( $config['username']['enabled'] ) ) { | |
| return 'username'; | |
| } | |
| return null; | |
| } | |
| add_filter( 'wcv_signup_validation_errors', function( $errors, $form_data ) { | |
| $username_key = wcv_signup_get_username_field_key(); | |
| if ( ! $username_key ) { | |
| return $errors; | |
| } | |
| // Get the live field config after filters so toggles are respected. | |
| $config = apply_filters( 'wcv_signup_form_config', get_option( 'wcv_signup_form_config', array() ) ); | |
| $field = $config[ $username_key ]; | |
| $is_enabled = ! empty( $field['enabled'] ); | |
| $is_required = ! empty( $field['required'] ); | |
| $label = isset( $field['label'] ) ? (string) $field['label'] : __( 'Username', 'wc-vendors-signup' ); | |
| $raw_value = isset( $form_data[ $username_key ] ) ? (string) $form_data[ $username_key ] : ''; | |
| $value = sanitize_user( $raw_value, true ); | |
| if ( ! $is_enabled ) { | |
| return $errors; // field disabled; skip validation | |
| } | |
| if ( $is_required && $value === '' ) { | |
| $errors[ $username_key ] = array( | |
| 'message' => __( 'Please enter a username.', 'wc-vendors-signup' ), | |
| 'label' => $label, | |
| ); | |
| return $errors; | |
| } | |
| // If provided (required or optional), validate format and uniqueness. | |
| if ( $value !== '' ) { | |
| if ( strlen( $value ) < 3 ) { | |
| $errors[ $username_key ] = array( | |
| 'message' => __( 'Username must be at least 3 characters.', 'wc-vendors-signup' ), | |
| 'label' => $label, | |
| ); | |
| return $errors; | |
| } | |
| if ( $value !== sanitize_user( $value, true ) ) { | |
| $errors[ $username_key ] = array( | |
| 'message' => __( 'Username contains invalid characters.', 'wc-vendors-signup' ), | |
| 'label' => $label, | |
| ); | |
| return $errors; | |
| } | |
| if ( username_exists( $value ) ) { | |
| $errors[ $username_key ] = array( | |
| 'message' => __( 'This username is already taken.', 'wc-vendors-signup' ), | |
| 'label' => $label, | |
| ); | |
| return $errors; | |
| } | |
| $GLOBALS['wcv_signup_requested_username'] = $value; // store for step 3 | |
| } | |
| return $errors; | |
| }, 10, 2 ); | |
| add_filter( 'pre_user_login', function( $user_login ) { | |
| $is_wcv_signup = ( isset( $_POST['action'] ) && 'wcv_process_registration' === $_POST['action'] ) // phpcs:ignore | |
| || isset( $_POST['wcv_registration_nonce'] ) // phpcs:ignore | |
| || isset( $_POST['nonce'] ); // phpcs:ignore | |
| if ( ! $is_wcv_signup ) { | |
| return $user_login; | |
| } | |
| // Prefer the submitted value by the actual, active field key. | |
| $username_key = wcv_signup_get_username_field_key(); | |
| if ( $username_key && isset( $_POST[ $username_key ] ) ) { // phpcs:ignore | |
| $requested = sanitize_user( (string) $_POST[ $username_key ], true ); // phpcs:ignore | |
| if ( $requested && ! username_exists( $requested ) ) { | |
| return $requested; | |
| } | |
| } | |
| // Fallback to the validated/stashed value if present. | |
| if ( ! empty( $GLOBALS['wcv_signup_requested_username'] ) ) { | |
| $requested = sanitize_user( (string) $GLOBALS['wcv_signup_requested_username'], true ); | |
| if ( $requested && ! username_exists( $requested ) ) { | |
| return $requested; | |
| } | |
| } | |
| return $user_login; | |
| }, 10 ); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment