Обновление страницы сайта с измененным 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. - аналогично, при переходе на вторую страницу (с параметром) все терялось, пользователь оказывался разлогиненным и прочая мистика.


Ответы (0 шт):