Как перенаправить неавторизованных пользователей на определенную страницу?
Как перенаправить неавторизованных пользователей, запрашивающих определенную страницу/URL, на другую страницу/URL и показать сообщение вроде "только для участников". Я знаю, что это довольно легко сделать с помощью функции !is_user_logged_in(), но я не знаю, как написать код, потому что я новичок в WordPress. Подскажите также, в какой файл нужно поместить код.

Вот 2 примера, которые вам нужно будет немного модифицировать, чтобы они работали под ваши конкретные нужды.
add_action( 'admin_init', 'redirect_non_logged_users_to_specific_page' );
function redirect_non_logged_users_to_specific_page() {
if ( !is_user_logged_in() && is_page('add page slug or ID here') && $_SERVER['PHP_SELF'] != '/wp-admin/admin-ajax.php' ) {
wp_redirect( 'http://www.example.dev/page/' );
exit;
}
}
Поместите этот код в файл функций дочерней темы, измените ID или slug страницы и URL для редиректа.
Вы также можете использовать код такого вида:
add_action( 'template_redirect', 'redirect_to_specific_page' );
function redirect_to_specific_page() {
if ( is_page('slug') && ! is_user_logged_in() ) {
wp_redirect( 'http://www.example.dev/your-page/', 301 );
exit;
}
}
Вы можете добавить сообщение прямо на страницу или, если хотите показывать сообщение для всех незалогиненных пользователей, добавьте его в код.

Спасибо за ответ. Я сделал так: `add_action('template_redirect', 'redirect_to_specific_page');
function redirect_to_specific_page() {
if ( is_page('http://mydomain.com/participate') && !is_user_logged_in()) {
wp_redirect('http://mydomain.com/login', 301); exit; } }` Но это не работает

Используйте ID страницы или slug, а не URL http://mydomain.com/participate http://codex.wordpress.org/Conditional_Tags

Это будет лучше:
if ( !is_user_logged_in() ) {
auth_redirect();
}
// продолжать как обычно для авторизованных пользователей
Этот код перенаправляет пользователя на страницу входа. После авторизации пользователь будет перенаправлен обратно на защищенную страницу, к которой он изначально пытался получить доступ.
Документация здесь:
https://codex.wordpress.org/Function_Reference/auth_redirect

Вы не можете перенаправить на конкретную страницу, но каждый неавторизованный пользователь будет перенаправлен на экран входа в систему.
<?php auth_redirect(); ?>
Справка WordPress: auth_redirect()
Просто упомянем ещё одно решение.

Ознакомьтесь со ссылкой 1 ниже. Она подскажет, какой файл вам нужно редактировать.
Ссылки 2 и 3 дадут вам базовое понимание работы с управляющими конструкциями.
В целом это должно выглядеть примерно так:
if ( is_user_logged_in() ) {
the_content();
} else {
echo 'Только для участников';
}
Конечно, приведённый выше код должен находиться внутри цикла. Вы можете сделать его настолько сложным или простым, насколько захотите. Например, вместо простого текста для незалогиненных пользователей можно вывести целую форму регистрации или — как я бы рекомендовал — разделённый экран, где пользователь может войти (если у него уже есть аккаунт, но он забыл авторизоваться) или зарегистрироваться (если у него ещё нет аккаунта).
Добавлено после комментариев ниже:
Для перенаправления используйте header
вместе с wp_login_url
— снова проверьте ссылки 1 и 2 ниже:
if ( is_user_logged_in() ) {
the_content();
} else {
header('Location: ' . wp_login_url());
}
Ссылки:

На самом деле я не знаю функцию в WordPress, которая возвращает запрашиваемый URL или постоянную ссылку. А что касается сообщения для отображения, оставьте его, я просто хочу перенаправлять пользователей, когда они запрашивают определенный URL без авторизации.
