Просмотр 3 ответов — с 1 по 3 (всего 3)
  • Модератор Sergey Biryukov

    (@sergeybiryukov)

    Live and Learn

    Фильтр sanitize_user нужно дополнить фильтром validate_username, примерно так:

    
    function my_sanitize_user( $username, $raw_username, $strict ) {
    	$username = wp_strip_all_tags( $raw_username );
    	$username = remove_accents( $username );
    	// Kill octets.
    	$username = preg_replace( '|%([a-fA-F0-9][a-fA-F0-9])|', '', $username );
    	// Kill entities.
    	$username = preg_replace( '/&.+?;/', '', $username );
    
    	// If strict, reduce to ASCII characters for max portability.
    	if ( $strict )
    		$username = preg_replace( '|[^a-z0-9 _.\-@]|iu', '', $username );
    
    	$username = trim( $username );
    	// Consolidate contiguous whitespace.
    	$username = preg_replace( '|\s+|', ' ', $username );
    
    	// Remove some leading and trailing characters.
    	$username = ltrim( $username, '-_.' );
    	$username = trim( $username, '-_.' );
    
    	return $username;
    }
    add_filter( 'sanitize_user', 'my_sanitize_user', 10, 3 );
    
    function my_validate_username( $valid, $username ) {
    	$sanitized = sanitize_user( $username, true );
    
    	$edited_username = ltrim( $username, '-_.' );
    	$edited_username = trim( $edited_username, '-_.' );
    
    	$valid = ( $sanitized == $edited_username && ! empty( $sanitized ) );
    
    	return $valid;
    }
    add_filter( 'validate_username', 'my_validate_username', 10, 2 );
    

    Спасибо, помогло!

    Еще одно наблюдение про логины и страницы профилей.
    Пробел в логине — превращается в тире в URL. Точки и тире в URL интерпретируются одинокого ведут на одну и туже страницу. Возможно, это ошибка в настройках моего веб-сервера. По итогу у меня куча дублирующих URL и ошибки в поиске по базе.
    Я не смог найти корень проблемы. Решил так же запретить использовать пробел в качестве разделителя, автоматически заменять точку на тире, хоть как-то к общему виду привести.

    Теперь ---.volk--- превращается в volk

    Правила валидации логинов каждый придумывает сам, есть плагины, например Restrict Usernames Emails Characters

    Дополню. Данные правила распространяются не только на новые регистрации, но и на авторизацию в целом, старые пользователи не могут войти.

Просмотр 3 ответов — с 1 по 3 (всего 3)