Обновление страницы сайта с измененным get-параметром вызывает то ли сброс сессии, то ли непонятное неадекватное поведение. Сайт WP, кастомный плагин
Для сайта на Wordpress разрабатывается плагин. Также на сайт добавлена авторизация по oAuth через Google и Facebook (с помощью плагина miniOrange). Уточняю этот момент, потому что может оказаться значимым.
Итак, пользователь с определенной ролью Visitor авторизуется на сайте через Google, и это перехватывается хуком:
function custom_login_handler()
{
global $current_visitor;
if (is_user_logged_in() && current_user_can('pickinteri_Visitor')) {
$user = wp_get_current_user();
$tmp_session = $_SESSION;
Auth::visitorAuthSet($user->ID);
$current_visitor = Pcab_Visitor::get_visitor();
$current_visitor->ID = $user->ID;
}
}
и потом из другого хука
if (is_user_logged_in() && current_user_can('pickinteri_Visitor')) {
wp_redirect(Auth::visitorCabinetURL());
exit;
}
if (is_user_logged_in() && current_user_can('subscriber')) {
wp_redirect(home_url());
exit;
}
}
add_action('admin_init', 'redirect_dashboard');
идет переадресация на страницу https://domain.space/visitor-cabinet/ На этой странице есть свое меню (также как и с кабинетами других ролей, но там пользователи полностью независимы от системы авторизации Wordpress - потому я вначале сделал на этом акцент), и, к примеру, я вызываю страницу этого же кабинета - но уже не редиректом, а по клику в меню https://domain.space/visitor-cabinet/?mode=settings
Это было описание процесса, а теперь собственно проблема с переменной $current_visitor, находящейся в скрипте visitor-cabinet.php (который и генерирует указанные страницы). В первом случае она про себя (вывод var_dump) сообщает:
php_class: TCAby\PickinteriCabinet\Admin\Pcab_Visitor, php_object: TCAby\PickinteriCabinet\Admin\Pcab_Visitor::__set_state(array(
'properties' =>
array (
'ID' => 12,
'first_name' => 'Вася',
'last_name' => 'Пупкин',
'full_name' => 'Вася Пупкин',
'display_name' => 'Вася Пупкин',
'email' => '[email protected]',
'avatar_url' => 'https://lh3.googleusercontent.com/a/ACg8ocJs_EdNxyyNf-lqA1WqY8xR-q-9ZX4jOdrd2NDY3Fz9Pp7p=s96-c',
'social_user_id' => '1144905419045954546685675134657',
'social_app' => 'google',
),
))
а во второй раз (страница с параметром):
php_class: __PHP_Incomplete_Class, php_object: __PHP_Incomplete_Class::__set_state(array(
'__PHP_Incomplete_Class_Name' => 'TCAby\\PickinteriCabinet\\Admin\\Pcab_Visitor',
'properties' =>
array (
'ID' => 12,
'first_name' => 'Вася',
'last_name' => 'Пупкин',
'full_name' => 'Вася Пупкин',
'display_name' => 'Вася Пупкин',
'email' => '[email protected]',
'avatar_url' => 'https://lh3.googleusercontent.com/a/ACg8ocJs_EdNxyyNf-lqA1WqY8xR-q-9ZX4jOdrd2NDY3Fz9Pp7p=s96-c',
'social_user_id' => '1144905419045954546685675134657',
'social_app' => 'google',
)
в принципе, я думаю, тут проблема не просто с этой переменной, ее поведение это просто видимая часть айсберга - потому что очень уж странное поведение после обновления страницы (см.ниже в Дополнении)
Дополнение: Перед этим вариантом решения (класс передавать через сессионную переменную) я пробовал делать его просто глобальной переменной в самом первом инициирующем файле - переменная терялась, становилась isset() = false
Еще до этого пробовал оперировать стандартным механизмом Wordpress - типа is_user_logged_in, wp_get_user_detail etc. - аналогично, при переходе на вторую страницу (с параметром) все терялось, пользователь оказывался разлогиненным и прочая мистика.