Как обойти ошибку "этот email адрес уже используется"?

22 дек. 2015 г., 22:46:46
Просмотры: 20.7K
Голосов: 6

Следующая ошибка может возникнуть, если предыдущая регистрация остается в ожидании с конфликтующим email адресом.

Этот email адрес уже используется. Пожалуйста, проверьте вашу почту на наличие письма для активации. Адрес станет доступным через несколько дней, если вы ничего не предпримете.

Связанная с этим ошибка имени пользователя выглядит следующим образом.

Это имя пользователя в настоящее время зарезервировано, но может стать доступным через несколько дней.

0
Все ответы на вопрос 6
1

Когда я добавляю нового пользователя с другим email-адресом, появляется сообщение об ошибке: Это имя пользователя в настоящее время зарезервировано, но может стать доступным через пару дней.

В моём случае я удалил строку из базы данных в таблице wp_signups, где user_login соответствовал имени пользователя. По сути:

delete from wp_signups where user_login = 'abc';

После этого я смог повторно добавить пользователя.

Дополнение от @aubreypwd: Кроме того, администраторы (только сетевые администраторы в MU или сетевой установке) имеют возможность добавлять пользователей без отправки email. Если вы отметите эту опцию, это позволит избежать данного процесса.

1 мая 2017 г. 22:40:30
Комментарии

Я также добавил бы детали, чтобы убедиться, что в следующий раз при попытке добавить пользователя нужно нажать "обойти подтверждение email", чтобы завершить этот ответ. Это очень хороший технический ответ, и я использую именно этот путь.

aubreypwd aubreypwd
26 окт. 2019 г. 00:21:23
0
  1. Войдите в систему как администратор WordPress
  2. Перейдите к добавлению нового пользователя
  3. Установите флажок для обхода подтверждения по электронной почте
  4. Добавьте пользователя с другим адресом электронной почты
  5. Измените адрес электронной почты пользователя на желаемый

Для решения проблемы с похожим именем пользователя см. Как снять резервирование ожидающего регистрации имени пользователя?

Период ожидания составляет 2 дня после возникновения конфликта, а также существуют тикеты в Trac для уточнения этого процесса: здесь и здесь.

22 дек. 2015 г. 22:46:46
1

Для обхода ошибки "этот адрес электронной почты уже используется" мы можем создать плагин, который эффективно пропускает проверку. Плагин будет работать в три этапа, используя три различных хука.

pre_user_login фильтрует имя пользователя после его очистки. Мы будем использовать этот хук для получения пользователя, особенно нас интересует его email.

pre_user_email фильтрует email пользователя перед его созданием или обновлением. Мы будем использовать этот хук для изменения email на случайные символы.

user_register срабатывает сразу после регистрации нового пользователя. Мы будем использовать этот хук для ручного обновления email пользователя после его регистрации.

add_filter( 'pre_user_email', [ new wpse_212671(), 'pre_user_login' ] );
class wpse_212671 {
  protected $user;
  public function pre_user_login( $user ) {
    $this->user = $user;
    if( isset( $user[ 'ID' ] ) || ! get_user_by( 'email', $user[ 'user_email' ] ) {
      return $user;
    }
    add_filter( 'pre_user_email', [ $this, 'pre_user_email' ] );
    add_action( 'user_register',  [ $this, 'user_register' ] );
  }
  public function pre_user_email( $email ) {
    return $this->generate_random_string();
  }
  public function user_register( $user_id ) {
    global $wpdb;
    $table = $wpdb->prefix . 'users';
    $wpdb->query( $wpdb->prepare(
      "UPDATE %s 
      SET user_email = %s
      WHERE user_login = %s", 
      $table,
      $this->user[ 'user_email' ], 
      $this->user[ 'user_login' ]
    ) );
  }
  //* Код немного изменён по сравнению с http://stackoverflow.com/a/13212994/6077935
  protected function generate_random_string( $length = 40 ) {
    return substr( str_shuffle( str_repeat( 
      $x='0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ',
      ceil( $length / strlen( $x ) )
    ) ), 1, $length );
  }
}
1 мая 2017 г. 23:48:51
Комментарии

Так это позволит мне полностью удалить пользователя без необходимости заходить в базу данных и вручную удалять пользователей из wp_signups?

Chef Mike Chef Mike
4 июн. 2017 г. 23:46:21
1

Существует полезный плагин под названием "User Activation Keys", который добавляет пункт меню в интерфейс управления пользователями сети:

https://wordpress.org/plugins/user-activation-keys/

Он позволяет редактировать/удалять/подтверждать запросы на активацию пользователей и, соответственно, зарезервированные адреса электронной почты/имена пользователей.

15 авг. 2018 г. 08:15:39
Комментарии

Работал с моей очень старой версией WordPress 4.8 на PHP 5.4

aldemarcalazans aldemarcalazans
28 февр. 2024 г. 20:25:06
0

Если вам удобно работать напрямую с MySQL и вы не хотите писать код или устанавливать плагин только для этой задачи, вы можете довольно просто решить эту проблему.

В базе данных MySQL вашего сайта будет таблица с именем { $wpdb->prefix }_signups, где $wpdb->prefix — это префикс, который вы настроили для использования в таблицах базы данных WordPress. (По умолчанию это wp_.)

Запросите эту таблицу по адресу электронной почты, который заблокирован, чтобы найти запись о регистрации:

SELECT * FROM {$wpdb->prefix}_signups WHERE user_email = '{ email address }';

Это вернет запись о попытке регистрации для этого адреса электронной почты. Затем просто УДАЛИТЕ эту запись из таблицы, и всё готово.

6 июн. 2022 г. 23:01:56
0

Используйте плагин Unconfirmed.

Unconfirmed создаёт панель в разделе Пользователи (Сеть Администраторов > Пользователи в мультисайте), которая показывает список неактивированных регистраций пользователей. Для каждой регистрации у вас есть возможность повторно отправить письмо с активацией или вручную активировать пользователя.

3 дек. 2023 г. 10:07:43