Вопрос или проблема
Кто-нибудь пробовал создать форму входа исключительно для подписчиков? То есть, чтобы роли пользователей с правами администратора, участников или авторов не могли войти в эту форму, а только пользователи с правами подписчиков. Спасибо!
Вот фрагмент. Убедитесь, что вы запускаете этот код после того, как пользователи вошли в систему.
// Получить информацию о текущем вошедшем пользователе
$user = wp_get_current_user();
// Условие для проверки, является ли пользователь подписчиком или нет
if ( in_array( 'subscriber', (array) $user->roles ) ) {
// У пользователя есть роль "подписчик"
}else{
// перенаправить пользователя в другую секцию и завершить их сессию
wp_logout(); // пользователь вышел из системы
wp_redirect( home_url( "https://wordpress.stackexchange.com/" ) ); // пользователь перенаправлен на домашнюю страницу
}
Дайте мне знать, сработает ли это для вас или нет.
Вы можете создать пользовательскую форму входа, которая ограничивает доступ только для подписчиков, проверяя роль пользователя в процессе входа.
Создайте новый шаблон страницы для вашей пользовательской страницы входа.
Добавьте следующий код в custom-login.php
<?php
/**
* Имя шаблона: Пользовательский вход
*/
// Проверка, вошел ли пользователь в систему, если да, перенаправить на домашнюю страницу
if (is_user_logged_in()) {
wp_redirect(home_url());
exit;
}
// Проверка, отправлена ли форма
if (isset($_POST['submit'])) {
$username = sanitize_text_field($_POST['username']);
$password = $_POST['password'];
// Попытка входа
$user = wp_signon(array(
'user_login' => $username,
'user_password' => $password,
'remember' => true,
));
// Проверка, успешен ли вход
if (is_wp_error($user)) {
$error_message = $user->get_error_message();
} else {
// Перенаправить пользователя после успешного входа
wp_redirect(home_url());
exit;
}
}
?>
<!DOCTYPE html>
<html <?php language_attributes(); ?>>
<head>
<meta charset="<?php bloginfo('charset'); ?>">
<title><?php bloginfo('name'); ?> - Пользовательский вход</title>
<?php wp_head(); ?>
</head>
<body <?php body_class(); ?>>
<div id="login-form">
<h2>Вход</h2>
<?php if (isset($error_message)) : ?>
<p class="error"><?php echo $error_message; ?></p>
<?php endif; ?>
<form method="post" action="">
<p>
<label for="username">Имя пользователя</label>
<input type="text" name="username" id="username" required>
</p>
<p>
<label for="password">Пароль</label>
<input type="password" name="password" id="password" required>
</p>
<p>
<input type="submit" name="submit" value="Вход">
</p>
</form>
</div>
<?php wp_footer(); ?>
</body>
</html>
После этого создайте новую страницу в админке WordPress и назначьте ей шаблон Пользовательский вход.
Ответ или решение
Чтобы создать форму входа, предназначенную исключительно для пользователей с ролью подписчика в WordPress, вам нужно будет применить некоторые специальные настройки и код. Ниже приведены пошаговые инструкции для создания такой формы.
Шаг 1: Создайте шаблон страницы для специальной формы входа
-
В вашей теме WordPress создайте новый файл, назовите его, например,
custom-login.php
. -
Добавьте следующий код в этот файл:
<?php
/**
* Template Name: Custom Login
*/
// Проверяем, если пользователь уже вошел в систему; если да, перенаправляем на главную страницу
if (is_user_logged_in()) {
wp_redirect(home_url());
exit;
}
// Проверяем, отправлена ли форма
if (isset($_POST['submit'])) {
$username = sanitize_text_field($_POST['username']);
$password = $_POST['password'];
// Пытаемся войти в систему
$user = wp_signon(array(
'user_login' => $username,
'user_password' => $password,
'remember' => true,
));
// Проверяем, успешен ли вход
if (is_wp_error($user)) {
$error_message = $user->get_error_message();
} else {
// Проверяем, является ли пользователь подписчиком
if (in_array('subscriber', (array) $user->roles)) {
// Перенаправляем пользователя после успешного входа
wp_redirect(home_url());
exit;
} else {
// Если не подписчик, выходим из системы и перенаправляем на главную
wp_logout();
wp_redirect(home_url());
exit;
}
}
}
?>
<!DOCTYPE html>
<html <?php language_attributes(); ?>>
<head>
<meta charset="<?php bloginfo('charset'); ?>">
<title><?php bloginfo('name'); ?> - Custom Login</title>
<?php wp_head(); ?>
</head>
<body <?php body_class(); ?>>
<div id="login-form">
<h2>Вход</h2>
<?php if (isset($error_message)) : ?>
<p class="error"><?php echo $error_message; ?></p>
<?php endif; ?>
<form method="post" action="">
<p>
<label for="username">Имя пользователя</label>
<input type="text" name="username" id="username" required>
</p>
<p>
<label for="password">Пароль</label>
<input type="password" name="password" id="password" required>
</p>
<p>
<input type="submit" name="submit" value="Войти">
</p>
</form>
</div>
<?php wp_footer(); ?>
</body>
</html>
Шаг 2: Создайте новую страницу в WordPress
-
Перейдите в админ-панель WordPress.
-
Создайте новую страницу и назовите её, например, "Вход для подписчиков".
-
В правой части редактора страницы найдите блок "Атрибуты страницы" и выберите шаблон "Custom Login" из выпадающего меню.
-
Опубликуйте страницу.
Шаг 3: Протестируйте форму входа
-
Попробуйте войти с учетной записью, у которой есть роль подписчика, и убедитесь, что вход проходит успешно, и пользователь перенаправляется на главную страницу.
-
Затем попробуйте войти с учетной записью, имеющей другую роль (например, администратор или автор). Убедитесь, что такая попытка приводит к выходу из системы и перенаправлению на главную страницу.
Дополнительные советы
- Убедитесь, что ваш сайт защищен от злоумышленников. Рассмотрите возможность установки плагинов безопасности и входа в систему.
- Рассмотрите возможность добавления функционалов, таких как восстановление пароля, для улучшения пользовательского опыта.
Соблюдая эти шаги, вы сможете успешно создать форму входа, которая требует от пользователя быть подписчиком для доступа. Если у вас возникнут дополнительные вопросы, не стесняйтесь обращаться за помощью.