Intereting Posts
Как обновить записи с помощью $ wpdb? Как изменить язык? Пользовательские короткие коды, не вставляемые в столбцы визуальных композиторов Макросы для WordPress, создание субдоменов из регистраций для текущего домена Как я могу заставить этот запрос использовать шаблон страницы Custom Post Type? Добавить категории и теги для WP User FrontEnd Почему я получаю ошибки в product.thumbnails.php? HowTo: добавление класса в список виджетов боковой панели Страница в качестве родителя для CPT и других страниц Как перечислить дерево страниц? способность multi-vender wooCommerce отделять продукты на основе почтового индекса Выбор страниц для отображения пользовательского типа сообщений при использовании флажка Как изменить размер изображения заголовка в пользовательских тем Можно ли изменить размер изображения, используемый для предварительного просмотра в папке «Добавить медиа» Добавить визуальный редактор на экран редактирования мультимедиа

Показывать пользовательский шаблон, независимо от того, просматривается ли страница, если пользователь не зашел в систему

Мне было поручено создать сайт WordPress, где подписчики (зарегистрированные администратором) не знают об этом.

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

У меня есть следующий код, который определяет, зарегистрирован ли пользователь и показывает ли он страницу входа в систему, но, к сожалению, потому что для этого требуется перенаправление, по-видимому, нет способа перенаправлять пользователя туда, откуда он хотел пойти первоначально.

То, что я хотел бы сделать, это определить, зарегистрирован ли usre или нет, и если они не переопределяют шаблон, который обычно используется с пользовательским шаблоном login.php , подобно тому, как отображается шаблон 404.

Чтобы сделать это, я предполагаю, что мне нужно как-то подключиться к иерархии шаблонов и переопределить обычный шаблон, но я не уверен, как это сделать, и прибегаю к советам.

Вот что я получил в настоящее время, который перенаправляет пользователя на определенную страницу, если они не вошли в систему (что близко, но не идеально) –

 /** * Redirect the user to the 'please login' page if they are not logged in */ add_action('wp', 'djg_check_login'); function djg_check_login(){ $scheme = (is_ssl()) ? 'https' : 'http'; /** Construct the URL of the page the user is trying to view */ $url = sprintf( '%1$s://%2$s%3$s', $scheme, /** %1$s - The request shceme (http|https) */ $_SERVER['SERVER_NAME'], /** %2$s - The server name */ $_SERVER['REQUEST_URI'] /** $3$s - The request URI */ ); /** List the pages that are authorised for non-logged in users */ $authorised_pages = array( get_site_url().'/login/', get_site_url().'/wp-login.php' ); /** Ensure that the user is actually NOT logged in */ if(!is_user_logged_in()) : /** Ensure we are not trying to view an $authorised page (to avoid a loop) */ if(!in_array($url, $authorised_pages)) : /** Redirect the user and exit */ wp_safe_redirect(get_page_link(7)); exit; endif; endif; } 

Это оказалось намного проще, чем я боялся, используя фильтр template_include

 /** * Override the standard WordPress template with the 'please login' template if the current user is not logged in */ add_filter('template_include', 'portfolio_page_template', 99); function portfolio_page_template($template){ /** List the pages that are authorised for non-logged in users */ $authorised_pages = array( get_site_url().'/login/', get_site_url().'/wp-login.php' ); /** Ensure that the user is actually NOT logged in */ if(!is_user_logged_in()) : /** Ensure we are not trying to view an $authorised page (to avoid a loop) */ if(!in_array($url, $authorised_pages)) : /** Setup the new template */ $new_template = locate_template(array('login-page.php')); if($new_template !== '') : return $new_template ; endif; endif; endif; return $template; }