WordPress

wtyczki – Dodaj nową regułę hasła do formularza rejestracji Ultimate Member

  • 4 września, 2020
  • 5 min read
wtyczki – Dodaj nową regułę hasła do formularza rejestracji Ultimate Member


Trzeba robić różne rzeczy. Ale możesz zmienić haczyk, którego używa Ultimate Member. Używają klasy Validation. Ale pamiętając o swoich potrzebach, możesz ominąć użycie tej klasy. To jest rozwiązanie, które myślę, że zadziała

remove_action( 'um_submit_form_register', 'um_submit_form_register', 10 );

Teraz zarejestrujemy nową metodę.

add_action( 'um_submit_form_register', 'my_custom_submit_form_register', 10 );

Oto funkcja. Myślę, że programiści muszą zrobić w następnej wersji, aby zapewnić filtr wewnątrz klasy Validation.

function my_custom_submit_form_register( $args ) {
    if ( isset( UM()->form()->errors ) ) {
        return false;
    }

    /**
     * UM hook
     *
     * @type filter
     * @title um_add_user_frontend_submitted
     * @description Extend user data on registration form submit
     * @input_vars
     * [{"var":"$submitted","type":"array","desc":"Registration data"}]
     * @change_log
     * ["Since: 2.0"]
     * @usage
     * <?php add_filter( 'um_add_user_frontend_submitted', 'function_name', 10, 1 ); ?>
     * @example
     * <?php
     * add_filter( 'um_add_user_frontend_submitted', 'my_add_user_frontend_submitted', 10, 1 );
     * function my_add_user_frontend_submitted( $submitted ) {
     *     // your code here
     *     return $submitted;
     * }
     * ?>
     */
    $args = apply_filters( 'um_add_user_frontend_submitted', $args );

    extract( $args );

    if ( ! empty( $username ) && empty( $user_login ) ) {
        $user_login = $username;
    }

    if ( ! empty( $first_name ) && ! empty( $last_name ) && empty( $user_login ) ) {

        if ( UM()->options()->get( 'permalink_base' ) == 'name' ) {
            $user_login = rawurlencode( strtolower( str_replace( " ", ".", $first_name . " " . $last_name ) ) );
        } elseif ( UM()->options()->get( 'permalink_base' ) == 'name_dash' ) {
            $user_login = rawurlencode( strtolower( str_replace( " ", "-", $first_name . " " . $last_name ) ) );
        } elseif ( UM()->options()->get( 'permalink_base' ) == 'name_plus' ) {
            $user_login = strtolower( str_replace( " ", "+", $first_name . " " . $last_name ) );
        } else {
            $user_login = strtolower( str_replace( " ", "", $first_name . " " . $last_name ) );
        }

        // if full name exists
        $count = 1;
        $temp_user_login = $user_login;
        while ( username_exists( $temp_user_login ) ) {
            $temp_user_login = $user_login . $count;
            $count++;
        }
        if ( $temp_user_login !== $user_login ) {
            $user_login = $temp_user_login;
        }
    }

    if ( empty( $user_login ) && ! empty( $user_email ) ) {
        $user_login = $user_email;
    }

    $unique_userID = UM()->query()->count_users() + 1;

    if ( empty( $user_login ) || strlen( $user_login ) > 30 && ! is_email( $user_login ) ) {
        $user_login = 'user' . $unique_userID;
    }

    if ( isset( $username ) && is_email( $username ) ) {
        $user_email = $username;
    }

    if ( ! isset( $user_password ) ) {
        $user_password = apply_filters('my_custom_password_strength', UM()->validation()->generate( 8 ));
    }

    if ( empty( $user_email ) ) {
        $site_url = @$_SERVER['SERVER_NAME'];
        $user_email="nobody" . $unique_userID . '@' . $site_url;
        /**
         * UM hook
         *
         * @type filter
         * @title um_user_register_submitted__email
         * @description Change user default email if it's empty on registration
         * @input_vars
         * [{"var":"$user_email","type":"string","desc":"Default email"}]
         * @change_log
         * ["Since: 2.0"]
         * @usage
         * <?php add_filter( 'um_user_register_submitted__email', 'function_name', 10, 1 ); ?>
         * @example
         * <?php
         * add_filter( 'um_user_register_submitted__email', 'my_user_register_submitted__email', 10, 1 );
         * function my_user_register_submitted__email( $user_email ) {
         *     // your code here
         *     return $user_email;
         * }
         * ?>
         */
        $user_email = apply_filters( 'um_user_register_submitted__email', $user_email );
    }

    $credentials = array(
        'user_login'    => $user_login,
        'user_password' => $user_password,
        'user_email'    => trim( $user_email ),
    );

    $args['submitted'] = array_merge( $args['submitted'], $credentials );
    $args = array_merge( $args, $credentials );

    //get user role from global or form's settings
    $user_role = UM()->form()->assigned_role( UM()->form()->form_id );

    //get user role from field Role dropdown or radio
    if ( isset( $args['role'] ) ) {
        global $wp_roles;
        $um_roles = get_option( 'um_roles' );

        if ( ! empty( $um_roles ) ) {
            $role_keys = array_map( function( $item ) {
                return 'um_' . $item;
            }, get_option( 'um_roles' ) );
        } else {
            $role_keys = array();
        }

        $exclude_roles = array_diff( array_keys( $wp_roles->roles ), array_merge( $role_keys, array( 'subscriber' ) ) );

        //if role is properly set it
        if ( ! in_array( $args['role'], $exclude_roles ) ) {
            $user_role = $args['role'];
        }
    }

    /**
     * UM hook
     *
     * @type filter
     * @title um_registration_user_role
     * @description Change user role on registration process
     * @input_vars
     * [{"var":"$role","type":"string","desc":"User role"},
     * {"var":"$submitted","type":"array","desc":"Registration data"}]
     * @change_log
     * ["Since: 2.0"]
     * @usage
     * <?php add_filter( 'um_registration_user_role', 'function_name', 10, 2 ); ?>
     * @example
     * <?php
     * add_filter( 'um_registration_user_role', 'my_registration_user_role', 10, 2 );
     * function my_user_register_submitted__email( $role, $submitted ) {
     *     // your code here
     *     return $role;
     * }
     * ?>
     */
    $user_role = apply_filters( 'um_registration_user_role', $user_role, $args );

    $userdata = array(
        'user_login'    => $user_login,
        'user_pass'     => $user_password,
        'user_email'    => $user_email,
        'role'          => $user_role,
    );

    $user_id = wp_insert_user( $userdata );

    /**
     * UM hook
     *
     * @type action
     * @title um_user_register
     * @description After complete UM user registration.
     * @input_vars
     * [{"var":"$user_id","type":"int","desc":"User ID"},
     * {"var":"$args","type":"array","desc":"Form data"}]
     * @change_log
     * ["Since: 2.0"]
     * @usage add_action( 'um_user_register', 'function_name', 10, 2 );
     * @example
     * <?php
     * add_action( 'um_user_register', 'my_user_register', 10, 2 );
     * function my_user_register( $user_id, $args ) {
     *     // your code here
     * }
     * ?>
     */
    do_action( 'um_user_register', $user_id, $args );

    return $user_id;
}

Nic nie zmieniałem, tylko dodałem filtr, więc nie ma problemu, jeśli programiści coś zmienią (będziesz miał problemy, jeśli programiści dodadzą do tego nowe rzeczy, w przeciwnym razie sięgnę do nich, aby dodać filtr). Oto filtrowana funkcja.

function my_custom_password_strength() {
    global $ultimatemember;
    $password = $_POST['user_password-257'];

     if (preg_match(" /^(?=.*[!@#$%^&*-])(?=.*[0-9])(?=.*[A-Z]).{8,20}$/", $password)) {
             return wp_generate_password(8)
        } else {
            $ultimatemember->classes['form']->add_error( 'user_password-257', __('Your password must have a special character') );
            do_action('um_user_registration', $args); 
        }
}

Tylko w ten sposób możesz to zrobić. Być może będziesz musiał dodać jeszcze kilka czeków. Ale pamiętaj, aby po prostu bawić się funkcją filtrowania my_custom_password_strength().

Mam nadzieję że to pomoże. Dzięki

Warto przeczytać!  Defender Pro działa teraz z Patchstack


Źródło