В этой статье мы разберём, как управлять процессом регистрации пользователей в WordPress без использования сторонних плагинов. Часто возникает необходимость изменить стандартное поведение регистрации или полностью отключить её, чтобы избежать спама и нежелательных аккаунтов. Также рассмотрим, как программно удалить пользователей и валидировать регистрацию с кастомными условиями.
Почему стоит управлять регистрацией пользователей вручную
Стандартный механизм регистрации в WordPress прост и удобен, но при этом он может не соответствовать специфическим требованиям сайта. Например, нужна дополнительная проверка данных, ограничение пользователей по домену электронной почты или интеграция с внешними сервисами. Плагины часто добавляют лишний код и замедляют сайт, поэтому для оптимизации и безопасности лучше реализовывать нужный функционал программно.
Кроме того, при отключении регистрации можно избежать множества спам-аккаунтов, а также контролировать, кто и как добавляется на сайт.
Пример: на сайте wptemp.ru часто задают вопросы, как сделать регистрацию более безопасной и как удалять пользователей по определённым критериям без плагинов — это и будет темой нашей статьи.
Как полностью отключить регистрацию пользователей в WordPress
Если вам нужно просто отключить регистрацию, самый простой способ — убрать ссылку на регистрацию и запретить форму регистрации. В стандартной теме WordPress регистрация включается через настройки — Настройки > Общие > Членство > любой может регистрироваться. Уберите галочку, и регистрация отключится.
Однако если на сайте есть кастомные формы или темы с формой регистрации, потребуется программное решение. Для этого используйте следующий код в файле functions.php вашей темы или в отдельном плагине:
function wptemp_disable_registration() {
if (strpos($_SERVER['REQUEST_URI'], 'wp-login.php?action=register') !== false) {
wp_redirect(home_url());
exit;
}
}
add_action('init', 'wptemp_disable_registration');Этот код при попытке перейти на стандартную страницу регистрации перенаправит пользователя на главную страницу сайта.
Удаление ссылки на регистрацию из меню и виджетов
Если в меню или виджетах есть ссылки на регистрацию, их стоит убрать, чтобы пользователь не мог случайно попасть на форму.
Например, если у вас в меню есть пункт «Регистрация», можно удалить его через админку или программно:
function wptemp_remove_register_menu_link($items, $args) {
foreach ($items as $key => $item) {
if (strpos($item->url, 'action=register') !== false) {
unset($items[$key]);
}
}
return $items;
}
add_filter('wp_nav_menu_objects', 'wptemp_remove_register_menu_link', 10, 2);Как программно изменить процесс регистрации пользователей
Если нужно изменить стандартную регистрацию, например, добавить дополнительную проверку, можно использовать хуки WordPress, такие как registration_errors и user_register.
Пример: добавим проверку, чтобы регистрация была возможна только с почты, оканчивающейся на @example.com.
function wptemp_restrict_email_domain($errors, $sanitized_user_login, $user_email) {
if (!preg_match('/@example\.com$/', $user_email)) {
$errors->add('invalid_email_domain', __('Регистрация возможна только с почты @example.com'));
}
return $errors;
}
add_filter('registration_errors', 'wptemp_restrict_email_domain', 10, 3);Этот код проверит email и не позволит зарегистрироваться с других доменов.
Добавление дополнительных полей в форму регистрации
Чтобы добавить свои поля, потребуется вывести их на страницу регистрации и сохранить.
Пример добавления поля «Телефон»:
function wptemp_show_phone_field() {
?>
<p>
<label for="phone">Телефон<br />
<input type="text" name="phone" id="phone" class="input" value="<?php echo esc_attr($_POST['phone'] ?? ''); ?>" size="25" /></label>
</p>
<?php
}
add_action('register_form', 'wptemp_show_phone_field');
function wptemp_validate_phone_field($errors, $sanitized_user_login, $user_email) {
if (empty($_POST['phone']) || !preg_match('/^\+?\d{10,15}$/', $_POST['phone'])) {
$errors->add('phone_error', __('Пожалуйста, укажите корректный номер телефона.'));
}
return $errors;
}
add_filter('registration_errors', 'wptemp_validate_phone_field', 10, 3);
function wptemp_save_phone_field($user_id) {
if (!empty($_POST['phone'])) {
update_user_meta($user_id, 'phone', sanitize_text_field($_POST['phone']));
}
}
add_action('user_register', 'wptemp_save_phone_field');Таким способом вы расширите стандартную регистрацию дополнительными данными.
Как программно удалить пользователей по определённым критериям
Иногда требуется массово удалить пользователей, например, неактивных или зарегистрированных с подозрительных почт.
Пример функции для удаления пользователей, у которых нет опубликованных записей и дата регистрации старше 30 дней:
function wptemp_delete_inactive_users() {
$args = [
'role__in' => ['subscriber', 'contributor'],
'meta_query' => [],
'date_query' => [
[
'before' => '30 days ago',
],
],
'fields' => 'ID',
'number' => -1,
];
$user_query = new WP_User_Query($args);
$users = $user_query->get_results();
foreach ($users as $user_id) {
$posts_count = count_user_posts($user_id);
if ($posts_count === 0) {
wp_delete_user($user_id);
}
}
}
// Запускайте эту функцию вручную или через cron
// wptemp_delete_inactive_users();Такой подход позволяет автоматически очищать базу от неактивных пользователей без риска удалить важные аккаунты.
Интеграция с плагинами WPSHOP для расширения функционала регистрации
Если вам требуется больше возможностей, например, продвинутые формы регистрации или подтверждение аккаунта, на сайте My Popup позволяет создавать кастомные формы с валидацией и всплывающими окнами для регистрации.
Плагин Expert Review может помочь в организации подтверждения и проверки новых пользователей с помощью отзывов или экспертной оценки.
При необходимости интеграции с этими плагинами используйте хук user_register для запуска дополнительных действий после регистрации.
Выводы и рекомендации
Управление регистрацией пользователей без плагинов — это эффективный способ сделать сайт более безопасным и настроенным под свои нужды. Использование хуков и фильтров WordPress позволяет гибко менять логику регистрации, добавлять валидацию и удалять ненужных пользователей.
Внимательно тестируйте свои изменения на тестовом сайте, чтобы избежать блокировки реальных пользователей. Для более сложных задач можно дополнительно использовать готовые решения с сайта WPSHOP.