Intereting Posts
numberposts не отвечает на wp_reset_postdata () Не удается получить доступ к подкаталогам без wordpress, поскольку wordpress переопределяет их с ошибкой 404 Что может заставить фильтр gettext не работать для заданного текстового домена? Пользовательский JS API динамически добавляет разделы и элементы управления Содержимое страницы шаблона Как создать пользовательскую страницу на URL для WordPress? Фильтруемый портфолио в WordPress с использованием изотопа jQuery Как перенаправить пользователей в свой профиль после успешного редактирования своего профиля Являются ли идентификаторы страниц / сообщений уникальными для всей сети? Сочетание разбиения на категории категорий категорий Что такое / wp-json? save_post action, прежде чем опубликовать / сохранить сообщение Почему я не могу войти в мои «сетевые сайты»? Пользовательский тип сообщения, который не соответствует категориям и тегам Можно ли использовать `wp_schedule_event` с настоящими cronjobs?

Как остановить перенаправление, если пользователь уже находится на правильной странице (с помощью переключателя Case)

Я использую WordPress Multisite с платным членством Pro для двух типов пользователей-членов (корпоративные компании, отдельные лица). У меня есть подсайты для корпоративных пользователей (например, enterprise.mysite.com), у которых есть доступ к контенту на mysite.com. У меня установлены разные «панели мониторинга» для отдельных уровней и корпоративных пользователей. Например, пользователь «rookie» перенаправляется на mysite.com/rookie-dashboard/, а корпоративный пользователь перенаправляется на корпоративный.mysite.com/dashboard/ после входа в систему. Каждый член настроен как абонент и ему назначается пользовательский уровень ID на основе того, какой пакет они приобрели (через PaidMembershipPro)

Тем не менее, я пытаюсь настроить перенаправление функции, если пользователь пытается получить доступ к неправильной панели. Вот что я установил до сих пор:

function dashboard_redirect() { global $current_user, $post; switch ($current_user->membership_level->id) { case "2": // Rookie Member level wp_redirect('/rookie-dashboard/'); break; case "3": // Player Member level wp_redirect('/player-dashboard/'); break; case "4": // All-Star Member level wp_redirect('/allstar-dashboard/'); break; case "5": // Coach Member level wp_redirect('/coach-dashboard/'); break; case "6": // Owner Member level if (! is_page(197) ) { return false; } else { wp_redirect('/dashboard/'); } break; case "7": if (! is_page('/dashboard/') ) { return false; } else { // Corporate wp_redirect('http://corporate.mysite.com/dashboard/'); } } } add_action('template_redirect', 'dashboard_redirect'); 

Проблема, с которой я сталкиваюсь, – это обнуление процесса, когда нужный пользователь находится на странице своей панели. Я получаю бесконечные циклы, если у меня есть коммутатор с переадресацией, поэтому я попробовал добавить if / then к коммутатору, но не могу заставить его работать. Не уверен, что я делаю неправильно.

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

 function dashboard_redirect() { global $current_user, $post; //* Escape early if not on a 'dashboard' page $current = trailingslashit( $_SERVER[ 'REQUEST_URI' ] ); if( false === stripos( $current, 'dashboard' ) ) { return; } switch ( $current_user->membership_level->id ) { case "2": // Rookie Member level $redirect = '/rookie-dashboard/'; break; case "3": // Player Member level $redirect = '/player-dashboard/'; break; //* Etc. } //* Redirect if we're not already on the right page $current = trailingslashit( $_SERVER[ 'REQUEST_URI' ] ); if( $current !== $redirect ) { wp_redirect( $redirect ); } } //* Conditionally add action when user tries to access a 'dashboard' page $current = trailingslashit( $_SERVER[ 'REQUEST_URI' ] ); if( false !== stripos( $current, 'dashboard' ) ) { add_action( 'template_redirect', 'dashboard_redirect' ); } 

Добавлен пример кода о том, как вы можете условно добавить крюк или как избежать раннего от обратного вызова, если мы не на странице панели. Используйте один или другой. Вероятно, я бы использовал метод escape, но только потому, что он чище.