Сайт виден только зарегистрированным пользователям
Как я могу отключить доступ для незарегистрированных пользователей? Если пользователь не вошел в систему, я хочу перенаправлять его на кастомную страницу регистрации/входа. Возможно ли это сделать с помощью приведенного ниже кода, так как я не хочу использовать плагин.
<?php
if ( is_user_logged_in() ) {
echo 'Добро пожаловать, зарегистрированный пользователь!';
} else {
echo 'Добро пожаловать, посетитель!';
}
?>
Спасибо.

Напишите это в виде плагина:
add_action( 'template_redirect', 'auth_redirect' );
Как плагин на GitHub.
Это заставит всех посетителей войти в систему, если они еще не сделали этого.
В некоторых случаях это будет запрашивать вход каждый раз. Возможно, лучше использовать такой вариант:
is_admin() || add_action( 'template_redirect', function() {
if ( ! is_user_logged_in() )
auth_redirect();
});
Если вы хотите отправить статус 404 вместо этого, вы можете заменить auth_redirect()
на:
wp_die( 'Нет.', 'Не найдено', [ 'response' => 404 ] );

По умолчанию посетитель будет перенаправлен на страницу, которую он пытался просмотреть. Вы можете написать обертку, очень похожую на auth_redirect()
, и установить $login_url
на конкретную страницу.

Я думаю, это может быть еще проще: можно удалить is_user_logged_in()
и оставить только auth_redirect()
, потому что auth_redirect()
работает следующим образом: если пользователь вошел в систему, он ничего не делает. Если пользователь не вошел в систему, он перенаправляет его/ее на страницу входа.

@cybnet Без этой дополнительной проверки иногда происходит сбой.

Если вы не хотите изменять свой код, вы можете использовать этот плагин: Restricted Site Access. Он имеет высокий рейтинг и, по моему личному опыту, работает действительно хорошо.
Ограничьте доступ к вашему сайту только для посетителей, которые вошли в систему или заходят с определенного набора IP-адресов. Перенаправляйте ограниченных посетителей на страницу входа, редиректите их или показывайте сообщение или страницу. Отличное решение для экстранетов, публично размещенных интранетов или параллельных разработок/тестовых сайтов.

Вот ответ, это легко сделать с помощью CSS..
- Основной div (.lor1) - это общий div, который начинается после header и заканчивается перед footer
- Добавить новый класс (.lor1.kun) в основной div, когда пользователь авторизован, этот основной класс будет display: block;
- Создать новый HTML, например, сообщение "Войдите сначала" (.lor1.user_not_login)
Добавьте этот код в header.php
<?php
if (!is_user_logged_in()) {
?>
<style>
.lor1{ display:none;}
.lor1.kun{ display: block;}
.lor1.user_not_login{ display: block;}
</style>
<?php } ?>

Добавьте эту функцию в файл functions.php.
Когда пользователь не авторизован и пытается получить доступ к главной странице (ID страницы == 2), его перенаправит на страницу входа.
<?php
add_action('template_redirect','wpse64899_check_if_logged_in');
function wpse64899_check_if_logged_in()
{
$pageid = 2; // или любой другой ID, который вам нужен
if(!is_user_logged_in() && is_page($pageid))
{
$url = add_query_arg(
'redirect_to',
get_permalink($pageid),
site_url('wp-login.php')
);
wp_redirect($url);
exit;
}
} ?>

Добавьте этот код в файл function.php вашей дочерней темы или родительской темы:
add_action( 'template_redirect', 'redirect_to_specific_page' );
function redirect_to_specific_page() {
if ( is_page('home') && ! is_user_logged_in() ) {
wp_redirect( 'https://example.com/login', 301 );
exit;
}
}
Пожалуйста, замените "home" на ярлык (slug) страницы, которую вы не хотите показывать незалогиненным пользователям, и замените URL "https://example.com/login" на URL страницы, куда вы хотите перенаправлять незалогиненных пользователей (например, страницу входа или регистрации).
