Проблема с регистрацией пользователей WP автоматически

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

Код в старой системе выглядит следующим образом:

function client_redirect_select_users($user_login, $user) { $user_id = $user->ID; $redirect_user = get_user_meta($user_id, 'client_redirect_user', true); if (intval($redirect_user) == 1) : $redirect_user_id = get_user_meta($user_id, 'client_redirect_user_id', true); /* Construct fancy string to obscure user id */ wp_redirect('http://sillysite.com/?user_redirect='.$redirect_user_string); exit(); endif; } add_action('wp_login', 'client_redirect_select_users', 10, 2); 

Код в новой системе выглядит следующим образом:

  function client_auto_login() { if (!is_user_logged_in()) : if (isset($_GET['user_redirect'])) : $user_login_string = intval($_GET['user_redirect']); /* Do some fancy stuff to extract user id from the GET string */ $user_data = get_userdata($decrypted_user_id); if ($user_data) : $user_login = $user_data->user_login; wp_set_current_user($user_id, $user_login); wp_set_auth_cookie($user_id, true); do_action('wp_login', $user_login); endif; endif; endif; } add_action('init', 'client_auto_login'); 

Пользователь зарегистрирован правильно и может видеть свои данные. Но когда они нажимают на любую ссылку на странице, они снова выходят из системы. Зачем? 🙁 Есть ли лучший способ сделать это? Я также могу отправить пароль пользователя из старой системы (с некоторым тривиальным шифрованием c) и вместо этого использовать wp_signon (), но я бы предпочел не делать этого.

Помогите?

(Я на 110% осознаю, что это не безопасное решение AT ALL, но это временная мера в течение нескольких недель, пока мы получаем новую систему в полном объеме, и пользователи не являются техническими вообще, поэтому мы пытаясь сделать его настолько безболезненным, насколько это возможно для них. Также не сразу очевидно, как получить доступ к любой учетной записи, просто просмотрев строку входа пользователя или даже поставляя случайный идентификатор пользователя, хотя механизм можно угадать с некоторым усилием) ,

Solutions Collecting From Web of "Проблема с регистрацией пользователей WP автоматически"

В конце концов, решение wp_signon () было решением, поскольку файл cookie, по-видимому, не был установлен с кодом, который я использовал. Я выполнил это решение https://gist.github.com/iandunn/8162246, чтобы обойти необходимость пароля и добавил эти функции в функции. Php.

Я также переместил код автолога из «init» в шаблон, где он выполняется до отправки любых заголовков или вывода любого html (выше wp_head ()).

Итак, теперь это выглядит так:

 if (!is_user_logged_in()) : if (isset($_GET['user_redirect'])) : $user_login_string = intval($_GET['user_redirect']); /* Fancy user id retrieval stuff */ $user_data = get_userdata($decrypted_user_id); if ($user_data) : $user_login = $user_data->user_login; $loggedin = programmatic_login( $user_login ); // <--- Gist function if ($loggedin) : wp_redirect('/userpage'); exit(); endif; endif; else : wp_redirect(wp_login_url()); exit; endif; endif; 

И это работает, wie, yay, happy dance.