В некоторых случаях владельцам сайта на WordPress необходимо полностью запретить регистрацию новых пользователей. Это может быть связано с безопасностью, нежеланием иметь открытый портал для регистрации или необходимостью управлять пользователями вручную. В этой статье мы рассмотрим несколько способов решения этой задачи — как с помощью настроек, так и с применением кода и плагинов.
Отключение регистрации через стандартные настройки WordPress
Самый простой способ — отключить возможность регистрации в настройках сайта. Для этого нужно:
- Перейти в Консоль WordPress → Настройки → Общие.
- Найти опцию Любой может зарегистрироваться и убрать галочку.
После этого форма регистрации и ссылки на нее перестанут работать, и новые пользователи не смогут зарегистрироваться через стандартные механизмы.
Однако этот способ не всегда 100% надежен, так как плагины или кастомные формы могут предоставлять регистрацию иначе. Поэтому рассмотрим более надежные методы.
Запрет регистрации с помощью фильтра в functions.php
Если вы хотите контролировать регистрацию программно, можно использовать фильтр wp_registration_url или перехватывать запросы регистрации и блокировать их.
Пример функции, которая отключит регистрацию полностью, возвращая ошибку при попытке зарегистрироваться:
function wpapp_disable_user_registration() {
if (isset($_GET['action']) && $_GET['action'] === 'register') {
wp_die('Регистрация пользователей временно отключена.');
}
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['user_login'])) {
wp_die('Регистрация пользователей временно отключена.');
}
}
add_action('init', 'wpapp_disable_user_registration');Эта функция проверяет, пытается ли пользователь открыть страницу регистрации или отправить форму регистрации, и при этом показывает сообщение об отключении.
Преимущества метода
- Полный контроль над процессом регистрации.
- Можно кастомизировать сообщение и логику.
- Работает даже если регистрация идет не через стандартную форму.
Недостатки
- Требует базового понимания PHP и WordPress API.
- Не блокирует регистрацию через REST API или внешние методы без дополнительного кода.
Блокировка регистрации через REST API и XML-RPC
Современные сайты часто используют REST API для регистрации. Чтобы полностью закрыть регистрацию, нужно заблокировать и эти методы.
Пример кода, который отключает регистрацию через REST API и XML-RPC:
function wpapp_block_rest_registration($result, $server, $request) {
if (get_option('users_can_register')) {
return $result; // Если регистрация разрешена, пропускаем
}
return new WP_Error(
'rest_registration_disabled',
__('Регистрация пользователей отключена.'),
array('status' => 403)
);
}
add_filter('rest_pre_dispatch', function($response, $server, $request) {
if ($request->get_route() === '/wp/v2/users/register') {
return wpapp_block_rest_registration($response, $server, $request);
}
return $response;
}, 10, 3);
function wpapp_disable_xmlrpc_registration($methods) {
if (isset($methods['wp.newUser'])) {
unset($methods['wp.newUser']);
}
return $methods;
}
add_filter('xmlrpc_methods', 'wpapp_disable_xmlrpc_registration');Этот код предотвращает регистрацию через REST API endpoint /wp/v2/users/register и отключает метод wp.newUser в XML-RPC.
Использование плагинов для управления регистрацией
Если вы не хотите писать код, можно воспользоваться готовыми плагинами. Вот несколько популярных вариантов:
- Disable User Registration — простой плагин для полного отключения регистрации без настроек.
- WP Cerber Security — комплексный плагин безопасности с возможностью блокировать регистрацию спамеров и нежелательных пользователей.
- Clearfy Pro — плагин оптимизации и безопасности, который позволяет отключать регистрацию и закрывать REST API.
Например, в Clearfy Pro можно быстро отключить регистрацию и усилить защиту сайта, не погружаясь в код.
Как разрешить регистрацию только определенным пользователям
Иногда нужно не полностью запретить регистрацию, а разрешить ее лишь ограниченному кругу лиц — например, по приглашению или с определенным кодом.
Для этого можно использовать фильтр registration_errors, проверяя введенный пользователем код приглашения:
function wpapp_restrict_registration_by_invite_code($errors, $sanitized_user_login, $user_email) {
if (empty($_POST['invite_code']) || $_POST['invite_code'] !== 'SECRET123') {
$errors->add('invite_code_error', __('Для регистрации требуется правильный код приглашения.'));
}
return $errors;
}
add_filter('registration_errors', 'wpapp_restrict_registration_by_invite_code', 10, 3);Также нужно добавить поле ввода кода приглашения на страницу регистрации. Для этого можно использовать хук register_form:
function wpapp_add_invite_code_field() {
?>
<p>
<label for="invite_code">Код приглашения<br>
<input type="text" name="invite_code" id="invite_code" class="input" value="<?php echo esc_attr($_POST['invite_code'] ?? ''); ?>" size="25" /></label>
</p>
<?php
}
add_action('register_form', 'wpapp_add_invite_code_field');<Такой метод позволяет гибко контролировать, кто может зарегистрироваться даже при включенной регистрации.
Итоги и рекомендации
Запрет регистрации на сайте WordPress — частая задача, которую можно решить разными способами:
- Отключить в настройках сайта — самый простой вариант.
- Добавить кастомный код для надежной блокировки стандартных и нестандартных методов регистрации.
- Блокировать REST API и XML-RPC регистрацию для защиты от обходов.
- Использовать плагины, например, Clearfy Pro, для удобного управления регистрацией и безопасностью.
- Если нужна ограниченная регистрация, добавлять проверку кодов приглашения через хуки и кастомные поля.
Выбирайте подходящий метод с учетом целей сайта и уровня вашей подготовки. В любом случае, контроль регистрации повышает безопасность и качество пользовательской базы.