Я разрабатываю плагин для подключения внешней системы поддержки к WordPress, чтобы иметь возможность аутентифицировать пользователей на WordPress.
Для этого, в настоящее время из внешней системы пользователь отправляется на страницу входа в WordPress с этим в конце
?action=freshdesk-remote-login
Мой плагин затем проверяет, вошел ли пользователь в WP, если нет, то показывает форму входа и после успешного входа перенаправляет его обратно на сторонний сайт.
Перенаправление выполняется с помощью этого: wp_redirect( $sso_url );
Это работает хорошо, но я планирую предложить шорткод, который можно добавить на страницу, которую выберет пользователь. Теперь, когда пользователь заходит на эту страницу, если он вошел в систему, его следует перенаправить на сторонний сайт, если нет, то на страницу входа.
Есть ли способ заставить wp_redirect работать внутри шорткода?
Шорткоды обычно запускаются слишком поздно для перенаправления изнутри. Обычно они запускаются на хуке the_content, который происходит после отправки содержимого в браузер. Если вам нужно перенаправить на основе наличия шорткода, вам нужно проверить этот шорткод, прежде чем какой-либо контент покинет сервер.
Добавьте
ob_start();
в начале плагина или в конструкторе класса:wp_redirect() выполняет перенаправление через заголовки HTTP, так что технически он не будет (или, по крайней мере, не должен) работать после начала вывода страницы. Вы не можете просто использовать эту функцию в шорткоде.
Это не означает, что вы не можете использовать шорткод. Вы можете проверить условия подгонки (если страница и страница содержат шорткод) до начала вывода (где-то около ловушки template_redirect) и затем выполнить перенаправление.
Другой вариант — вывести условно JavaScript, который будет выполнять перенаправление после загрузки страницы.