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