Перенаправление незалогиненных пользователей с определенных страниц
Я видел подобные вопросы, но они не совсем соответствуют тому, что я хочу сделать.
По сути мне нужно: Если пользователь не авторизован И находится на -этой странице- ИЛИ -этой странице- ИЛИ -этой странице, перенаправить его на -эту страницу- (которая является кастомной страницей регистрации)
Я пробую модифицировать этот код, но он не работает. Буду благодарен за любые подсказки.
<?php
function redirect_non_logged_in(){
// если пользователь не авторизован и находится на этих страницах
if( !is_user_logged_in() && is_page( array( 250, 253 ) ) ) {
// Перенаправление на кастомную страницу регистрации
wp_redirect(site_url('/user-registration'));
exit();
}
}
add_filter('get_header','redirect_non_logged_in');
?>

Ваша функция работает, но 'get_header'
— это уже слишком поздно.
Используйте template_redirect
вместо этого:
add_action( 'template_redirect', function() {
if ( is_user_logged_in() || ! is_page() ) return;
$restricted = array( 250, 253 ); // ID всех ограниченных страниц
if ( in_array( get_queried_object_id(), $restricted ) ) {
wp_redirect( site_url( '/user-registration' ) );
exit();
}
});
Убедитесь, что не включаете ID страницы 'user-registration' в массив $restricted
, иначе вы столкнётесь с бесконечным перенаправлением...

Извините за вмешательство, но вместо того, чтобы дублировать вопрос, я спрошу вас здесь. Я использую немного измененный код на основе вашего ответа: add_action( 'template_redirect', function() { if ( !is_page('login') || !is_user_logged_in() ) { wp_redirect( site_url( '/login', 301 ) ); exit(); }});
, однако у меня все равно возникает бесконечный редирект. Можете указать, в чем проблема?

Ваша проблема в том, что login — это не страница, поэтому is_page('login')
никогда не может быть true. Определить, находитесь ли вы на странице входа в WordPress не так просто, ознакомьтесь с этим ответом, чтобы узнать, как это сделать. @FrederickAndersen

Установите плагин ограничения страниц https://da.wordpress.org/plugins/pagerestrict/
В настройках выберите "не показывать форму входа"
Вставьте ссылку в сообщение об ограничении: <a href="https://ваша-страница-входа/">Войти</a>
для просмотра этой страницы/записи
