Проверка авторизации пользователя и перенаправление на другую страницу

24 июл. 2011 г., 19:12:56
Просмотры: 20K
Голосов: 0

Я создаю сайт только для участников, который требует, чтобы пользователи были авторизованы для использования сайта.

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

Код, который я попробовал

<?php if (is_user_logged_in() ) {
 wp_redirect ('dashboard' );
 exit;
 }
?>

Выдает ошибку "headers already sent". Код размещен в верхней части моего php файла.

Что я делаю неправильно?

3
Комментарии

Там указано, откуда отправляются заголовки?

Bainternet Bainternet
24 июл. 2011 г. 19:27:00

/wp-includes/pluggable.php на строке 934

javy javy
24 июл. 2011 г. 19:38:59

попробуй включить wp_debug и посмотри, что там происходит

Bainternet Bainternet
24 июл. 2011 г. 20:57:04
Все ответы на вопрос 2
4

Я не уверен, упростили ли вы для примера, но убедитесь, что используете полный URL в вызове wp_redirect().

Также, вместо размещения этого в шаблоне, я считаю более правильным запускать это через хук template_redirect.

24 июл. 2011 г. 20:02:16
Комментарии

Моё решение — это wp_redirect ( home_url("/dashboard") );, и я поместил этот код на первую строку шаблона. Хотя я не знаком с хуками, так что у вас, вероятно, есть веские основания. Почему?

javy javy
24 июл. 2011 г. 21:36:07

@javy template_redirect семантически является местом в коде, где "WordPress уже знает, что ему нужно начать загружать и выводить, но вы можете изменить его решение". Начало шаблона — это "мы уже загружаем эту вещь". Если вам не нужно то, что находится в шаблоне, нет смысла заходить так далеко в процессе.

Rarst Rarst
24 июл. 2011 г. 21:53:19

Логично, звучит так, будто это экономит ресурсы сервера?

javy javy
25 июл. 2011 г. 03:14:52

@javy Я не думаю, что разница в производительности между ними будет существенной.

Rarst Rarst
25 июл. 2011 г. 10:28:10
0
<?php if (is_user_logged_in() ) {
wp_redirect ( home_url("/dashboard") );
exit;
}
?>

Это то, что у меня получилось, и это работает. Также, кажется, я ошибся, разместив это ниже

<?php
/*Template Name: Главная*/
?>

Новый код находится на первой строке и работает.

25 июл. 2011 г. 03:13:41