В WordPress по умолчанию регистрация пользователей доступна по URL wp-login.php?action=register, если включена функция регистрации. В некоторых ситуациях необходимо ограничить возможность самостоятельной регистрации, например, если вы хотите принимать новых пользователей только вручную или через специальные формы. В этой статье разберём, как запретить регистрацию пользователей по URL и настроить альтернативные варианты с помощью кода и плагинов.
Почему нужно запретить регистрацию по URL
Регистрация по стандартному адресу может привести к нежелательным последствиям:
- Спам-боты и массовая регистрация фейковых аккаунтов.
- Потеря контроля над количеством и качеством пользователей.
- Уязвимости из-за слабого контроля регистрации.
Отключив регистрацию по стандартному URL, вы сможете повысить безопасность и управлять процессом более гибко.
Как проверить, включена ли регистрация пользователей в WordPress
Для начала убедитесь, что регистрация разрешена в настройках сайта. Перейдите в Консоль → Настройки → Общие и проверьте, стоит ли галочка "Разрешить регистрацию пользователей". Если она снята, регистрация через стандартный URL уже недоступна.
Если же галочка стоит, и вы хотите запретить регистрацию именно по URL, можно использовать методы из следующих разделов.
Запрет регистрации по URL через functions.php
Самый простой способ — отловить попытки перехода на страницу регистрации и делать редирект или показывать 404 ошибку. Добавьте в файл functions.php вашей темы следующий код:
function wppremium_block_registration_url() {
if ( isset($_GET['action']) && $_GET['action'] === 'register' ) {
wp_redirect(home_url()); // Перенаправляем на главную
exit;
}
}
add_action('login_init', 'wppremium_block_registration_url');
Этот код проверяет, если запрос на страницу регистрации, то делает редирект на главную страницу сайта. Вы можете изменить home_url() на любой другой URL, например, на страницу с информацией о регистрации.
Альтернативный вариант — выводить ошибку 404
Если хотите, чтобы страница регистрации просто не отображалась, а сервер выдавал ошибку 404, используйте такой код:
function wppremium_registration_404() {
if ( isset($_GET['action']) && $_GET['action'] === 'register' ) {
global $wp_query;
$wp_query->set_404();
status_header(404);
nocache_headers();
include(get_query_template('404'));
exit;
}
}
add_action('login_init', 'wppremium_registration_404');
Запрет регистрации с помощью плагинов
Если не хотите писать код, воспользуйтесь плагинами. Например:
- Disable User Registration — простой плагин, который полностью отключает регистрацию.
- Clearfy Pro — мощный оптимизатор, в котором есть опция отключения регистрации и защиты от спама.
Плагины позволяют быстро решить задачу без кода, но могут добавлять лишний функционал. Если нужна легковесная настройка, лучше использовать код.
Создание собственной формы регистрации и отключение стандартной
Если вы хотите оставить возможность регистрироваться, но не через стандартный URL, можно сделать собственную форму регистрации. Для этого создадим шорткод, который выведет форму, а регистрацию обработаем через AJAX.
Код создания шорткода с формой регистрации
function wppremium_custom_registration_form() {
if ( is_user_logged_in() ) {
return '<p>Вы уже авторизованы.</p>';
}
ob_start();
?>
<form id="wppremium-registration-form" method="post">
<p><label>Имя пользователя</label><br>
<input type="text" name="username" required /></p>
<p><label>Email</label><br>
<input type="email" name="email" required /></p>
<p><label>Пароль</label><br>
<input type="password" name="password" required /></p>
<p><input type="submit" value="Зарегистрироваться" /></p>
<input type="hidden" name="action" value="wppremium_register_user" />
<?php wp_nonce_field('wppremium_register_nonce', 'wppremium_register_nonce_field'); ?>
</form>
<div id="wppremium-registration-message"></div>
<script>
jQuery(document).ready(function($){
$('#wppremium-registration-form').on('submit', function(e){
e.preventDefault();
var data = $(this).serialize();
$.post(ajaxurl, data, function(response) {
$('#wppremium-registration-message').html(response.data.message);
if(response.success) {
$('#wppremium-registration-form')[0].reset();
}
});
});
});
</script>
<?php
return ob_get_clean();
}
add_shortcode('wppremium_registration_form', 'wppremium_custom_registration_form');
Обработка регистрации через AJAX
function wppremium_ajax_register_user() {
check_ajax_referer('wppremium_register_nonce', 'wppremium_register_nonce_field');
$username = sanitize_user($_POST['username']);
$email = sanitize_email($_POST['email']);
$password = $_POST['password'];
if (username_exists($username)) {
wp_send_json_error(['message' => 'Имя пользователя уже занято']);
}
if (!is_email($email)) {
wp_send_json_error(['message' => 'Некорректный email']);
}
if (email_exists($email)) {
wp_send_json_error(['message' => 'Email уже зарегистрирован']);
}
$user_id = wp_create_user($username, $password, $email);
if (is_wp_error($user_id)) {
wp_send_json_error(['message' => 'Ошибка регистрации']);
}
wp_send_json_success(['message' => 'Регистрация прошла успешно']);
}
add_action('wp_ajax_wppremium_register_user', 'wppremium_ajax_register_user');
add_action('wp_ajax_nopriv_wppremium_register_user', 'wppremium_ajax_register_user');
Добавьте шорткод [wppremium_registration_form] на нужную страницу, чтобы вывести форму. Такой подход позволяет полностью контролировать регистрацию, а стандартную страницу закрыть через первый способ.
Дополнительные советы по безопасности регистрации
Чтобы минимизировать спам и повысить качество регистрации, рекомендуем:
- Использовать капчу (например, Google reCAPTCHA) в собственной форме регистрации.
- Включить email-подтверждение регистрации с помощью плагинов или собственного кода.
- Ограничить количество регистраций с одного IP за определённый промежуток времени.
- Применять плагин Clearfy Pro для комплексной защиты и оптимизации.