Содержание статьи
Создавайте вручную, не копируйте между установками. При клонировании проектов с помощью Duplicator или аналогичных плагинов часто переносятся старые идентификаторы, что может вызвать конфликты в базе данных. Лучше прописывать каждую запись напрямую через wp_insert_user()
с явным указанием user_pass
и role
.
Зачем полагаться на GUI, если CLI быстрее и безопаснее? Команда WP-CLI:
wp user create admin_example admin@example.com --role=administrator --user_pass=123456
Работает без лишнего шума, сразу пишет в базу, минуя интерфейс и потенциальные CSRF-уязвимости. Но есть нюанс: по умолчанию создается запись user_registered
с текущей датой, а это может быть критично при логировании действий.
Рекомендуется дополнительно задать дату регистрации вручную:
global $wpdb;
$wpdb->query( \"UPDATE $wpdb->users SET user_registered = \'2025-01-01 00:00:00\' WHERE user_login = \'admin_example\'\" );
Важно: если сайт работает в сети multisite, присваивайте доступ через
add_user_to_blog()
, иначе аккаунт не получит прав на конкретный сайт.
Присваивайте уникальные ID – иначе вас ждет каша при массовом импорте. Значение ID
в wp_users
можно указать вручную, если создавать записи напрямую через SQL, но тогда придется синхронизировать его с wp_usermeta
, иначе интерфейс начнет вести себя странно: пустые поля, сбои в профиле, невозможность сохранить изменения.
Внимание! Нельзя присваивать роль вручную в базе, не прописав
wp_capabilities
иwp_user_level
. Без них аккаунт будет существовать, но без прав. Как пустая оболочка. Проверяйте!
Пример записи в таблицу метаданных:
INSERT INTO wp_usermeta (user_id, meta_key, meta_value) VALUES
(42, \'wp_capabilities\', \'a:1:{s:13:\"administrator\";b:1;}\'),
(42, \'wp_user_level\', \'10\');
Иногда требуется временный доступ: создавайте такие записи с суффиксами _temp
и автоматическим удалением через cron. Так вы избежите мусора и утечек доступа. И не забывайте про фильтры: pre_user_login
, user_register
и wp_login
можно использовать для журналирования и ограничения активностей.
И наконец, не передавайте пароль по почте. Никогда. Используйте одноразовую ссылку для установки, основанную на wp_create_user_request()
и токенах. Это быстрее и безопаснее, чем обычная отправка данных. А главное – не оставляет следов в логах сервера.
Слишком много? Именно так и надо. Без точности здесь все разваливается.
Как получить список новых пользователей WordPress за определённый период
Используйте WP_User_Query с фильтрацией по дате регистрации. Без этого ничего не выйдет.
Пример запроса, который вернет всех зарегистрированных после 1 мая 2025 года:
$args = array(
\'role__in\' => array(\'subscriber\', \'editor\', \'author\', \'contributor\', \'administrator\'),
\'orderby\' => \'registered\',
\'order\' => \'DESC\',
\'meta_query\' => array(
array(
\'key\' => \'user_registered\',
\'value\' => \'2025-05-01 00:00:00\',
\'compare\' => \'>=\',
\'type\' => \'DATETIME\'
)
)
);
$query = new WP_User_Query($args);
Не работает? Сюрприз – поле user_registered не хранится в usermeta. Это поле таблицы wp_users. Meta_query в данном случае бесполезен.
Вот рабочий способ:
global $wpdb;
$date = \'2025-05-01\';
$results = $wpdb->get_results( $wpdb->prepare(
\"SELECT * FROM $wpdb->users WHERE user_registered >= %s ORDER BY user_registered DESC\",
$date
));
Да, только через прямой SQL. Не тратьте время на костыли.
Важно! Поле user_registered не индексировано. Запрос может тормозить на больших базах.
Что дальше? Хотите получить email или ID? Перебирайте результат:
foreach ( $results as $user ) {
echo $user->user_email . \' | \' . $user->user_registered . \'<br>\';
}
Можно добавить ограничение по дате окончания. Просто расширьте условие:
\"WHERE user_registered BETWEEN %s AND %s\"
Выгрузка в CSV? Примитивно. Используйте fputcsv
в цикле. Не плодите плагины на ровном месте.
Внимание! Не доверяйте wp-admin фильтрам. Они не видят точные даты. Только ручной SQL дает контроль.
Этот метод голый, но честный. Оберните в REST-эндпоинт или WP-CLI, если нужно автоматизировать. Никаких сюрпризов, только контроль.
Открой wp-admin, перейди в раздел «Участники». Отсортируй таблицу по дате регистрации. Но стоп – WordPress по умолчанию не отображает дату создания аккаунта. Это ахиллесова пята.
Чтобы увидеть дату присоединения, необходимо подключить дополнительную функциональность. Самый прямой путь – установить плагин WP Users List With Registration Date
. Он добавляет колонку «Дата регистрации» без лишней нагрузки. Мгновенно.
Важно: без стороннего кода CMS не отображает дату создания учетной записи, а значит ручной контроль становится невозможен.
А что если требуется выгрузка? Тут без Export User Data
не обойтись. Этот инструмент добавляет раздел экспорта в меню «Инструменты». Выборка по ролям, фильтрация по времени создания, включение произвольных мета-полей – всё это доступно за два клика.
Если хочется без плагинов, используйте WP-CLI. Команда:
wp user list --field=ID,user_login,user_email,user_registered --format=csv
Результат – CSV-файл, готовый к импорту в Excel или Google Sheets. Но будь осторожен: данные выгружаются без фильтра. Хотите только зарегистрированных за последние 7 дней? Тогда так:
wp user list --format=csv --user_registered_after=\"$(date -d \'-7 days\' +%Y-%m-%d)\"
Пограничный случай: multisite. Здесь всё сложнее. Регистрация идет на уровне сети, но отображается только на уровне сайта. Используй фильтр user_register
вместе с логикой мультисайтовой идентификации.
Проблемы начинаются при попытке массовой выгрузки с кастомными полями. Решение – написание собственного SQL-запроса или использования WP_User_Query с дополнительными аргументами:
$args = array(
\'meta_key\' => \'registration_origin\',
\'meta_value\' => \'frontend\',
\'orderby\' => \'registered\',
\'order\' => \'DESC\'
);
$users = get_users($args);
Внимание! Многие плагины экспорта не учитывают пользовательские поля и не фильтруют по ролям корректно. Проверь результат вручную!
Итог: чтобы получить отображение и выгрузку без ошибок, понадобится комбинировать расширения и писать код. Только так можно обеспечить прозрачность и контроль.
Настройка автоматических уведомлений о регистрации новых пользователей для администратора
Рекомендуется сразу включить оповещения через почту. Без этого вы можете пропустить подозрительную активность или массовую регистрацию с ботов. В ядре CMS по умолчанию таких сообщений нет – нужно вмешательство.
Используйте хук user_register
. Он срабатывает в момент добавления записи в таблицу wp_users
. Пример кода, который отправляет уведомление на email администратора:
add_action(\'user_register\', \'notify_admin_on_registration\');
function notify_admin_on_registration($user_id) {
$user = get_userdata($user_id);
$email = get_option(\'admin_email\');
$subject = \'Регистрация: \' . $user->user_login;
$message = \'Добавлен аккаунт: \' . $user->user_email;
wp_mail($email, $subject, $message);
}
Убедитесь, что SMTP работает корректно. В противном случае уведомления не дойдут. Для отладки – подключите плагин WP Mail Logging. Без логирования невозможно понять, уходит ли письмо, или все глохнет на хостинге.
Если используется кастомная форма регистрации (например, через WPForms
или Gravity Forms
), стандартный хук может не сработать. Придётся использовать внутренние события этих плагинов. Например, для WPForms
:
add_action(\'wpforms_process_complete\', \'custom_register_notify\', 10, 4);
function custom_register_notify($fields, $entry, $form_data, $entry_id) {
if ($form_data[\'id\'] == 5) { // ID нужной формы
$email = get_option(\'admin_email\');
$subject = \'Через форму добавлен контакт\';
$message = \'Имя: \' . $fields[1][\'value\'] . \"\\nEmail: \" . $fields[2][\'value\'];
wp_mail($email, $subject, $message);
}
}
Важно! Не отправляйте письма с использованием
mail()
на дешёвом хостинге. Почта уйдёт в спам или не дойдёт вовсе. Используйте SMTP-подключение.
Проверка: создайте тестовую запись и отследите, приходит ли письмо. Если нет – возможны проблемы с настройкой хостинга, DNS или SPF-записями.
Поддержка мультиязычности? Подключите __()
или _e()
в строках темы письма. Пример:
$subject = __(\'Новая регистрация\', \'textdomain\');
Помните: отсутствие уведомлений = слепота. Особенно на сайтах с открытой регистрацией. Не ждите, пока станет поздно.
Периодически проверяйте, не блокирует ли отправку почты плагин безопасности. Некоторые из них могут вмешиваться в wp_mail
.
Финал простой: автоматизация через хуки – обязательна. Без неё вы теряете контроль. Не дайте бэкэнду спать!