Как получить учетную запись пользователя из Social Login зарегистрированным пользователям?

Похоже, что плагины социального входа (такие как WordPress Social Login, OneAll и т. Д.) Не создают пользователей в исходной wp-базе данных в качестве обычной регистрации на панели управления администратора. Следовательно, невозможно добавить или получить пользовательские метаданные от текущего пользователя «обычным способом».

Вопрос: Как получить пользовательскую мета из зарегистрированных пользователей социальных сетей?

У меня есть текущее дело, и я еще не нашел ответа. Надеюсь, ты поможешь мне.

Случай. В этом случае мы имеем Gravityform, который позволяет зарегистрированным пользователям отправлять новую страницу. Мы хотим, чтобы они представляли только одну страницу для каждого пользователя. Заголовок страницы автоматически создается и имеет идентификатор записи формы как уникальную часть заголовка страницы (настройки Gravityforms). Эта функция ниже используется для создания Gravityforms для создания страницы вместо сообщения:

add_filter("gform_post_data", "change_post_type", 10, 2); function change_post_type($post_data, $form){ //only change post type on form id 1 if($form["id"] != 2) return $post_data; $post_data["post_type"] = "page"; return $post_data; } 

Теперь мы хотим, чтобы пользователи, которые успешно заполнили форму и в настоящее время вошли в систему, отображали URL-адрес их созданной страницы, например, www.example.com/pagenumber{entry-ID} Поэтому есть 3 варианта отображения:

  1. пользователь вошел в систему и создал страницу -> показать URL страницы
  2. пользователь вошел в систему и еще не создал страницу -> показать форму -> перенаправить в пункт 1 после завершения
  3. пользователь не вошел в систему -> показать кнопки социального входа -> перенаправить на пункт 2 после подключения

Сначала нам нужно добавить идентификатор записи формы в user-meta:

 add_action( 'gform_after_submission', 'wpse96480_map_user_to_page', 10, 2); function wpse96480_map_user_page( $entry, $form ) { $user_id = $entry['created_by']; $meta_key = 'generated_page_id'; $meta_value = $entry['post_id']; $unique = true; add_user_meta( $user_id, $meta_key, $meta_value, $unique ); } 

Теперь мы добавим код ниже в файл page.php (или файл шаблона страницы), чтобы проверить, зарегистрирован ли текущий пользователь и имеет ли идентификатор входа в метателе пользователя, и если да, то для отображения URL-адреса с идентификатором записи:

 <?php if ( is_user_logged_in() ) { global $current_user; // $current_user = get_currentuserinfo(); $user_id = $current_user->ID; $meta_key = 'gform_entry_id'; $single = true; $entry_id = get_user_meta( $user_id, $meta_key, $single ); if( strlen( $entry_id ) > 0 && is_numeric( $entry_id ) ) { // we have an entry ID now ?> <h2>Hey <?php echo $current_user->display_name ?>, thank you for submitting the form. Visit your page here: www.example.com/pagenumber<?php echo( $entry_id ); ?></h2> <?php } else { // we don't have an entry ID for this user ?> <h2>Hey <?php echo $current_user->display_name ?>, Thank you for joining. To create a page please submit the form below:</h2><?php echo do_shortcode('[gravityform id="2" name="just a form" title="false" description="false"]'); ?> <?php } } else { // user is not logged in ?> <h2><Please log in to create a page <?php do_action( 'wordpress_social_login' ); ?></h2> <?php } ?> 

Результат: если зарегистрированный пользователь WP-пользователя (который создается администратором в панели управления администратора) зарегистрирован и завершает успешную форму, опция (1) эффективна / успешно отображается, как мы хотели. Если пользователь еще не заполнил форму, опция (2) является эффективной / успешной.

Проблема с пользователями Social Login: если пользователь, зарегистрированный через плагин Social Login, зарегистрировался и завершил успешную форму, опция (2) по-прежнему показывается, так как пользователь никогда не заполнял форму.

Вопрос: Как получить пользовательскую мета из зарегистрированных пользователей в социальных сетях? **

Solutions Collecting From Web of "Как получить учетную запись пользователя из Social Login зарегистрированным пользователям?"

Вы не указываете плагин, который используете. Но если пользователь вводит логин с OAuth (используемый большинством социальных платформ), то он не может быть зарегистрирован в WordPress.

Зачем?

Пользователю необходимо ввести имя пользователя и пароль для входа в систему. OAuth (и другие методы) не предоставляют пароль. Они отвечают только « Да», этот пользователь авторизован или « Нет», не разрешен .

Плагинам социального входа требуется метод для повторной идентификации пользователя, если он запрашивает новую страницу из блога. Они должны хранить что-то, что сообщает им. Этот пользователь вошел в систему . WordPress использует файл cookie. Другой метод – начать сеанс. Немного экзотический метод может использовать базу данных и IP-адрес. Я не знаю, как ваш плагин для социального входа повторно идентифицирует пользователя, но это важный момент, чтобы выяснить, почему ваш формуляр не работает.

Почему пользователь больше не вошел в систему?

Я предполагаю, что плагин потерял соединение с методом повторной идентификации. Значит, не может прочитать cookie или сеанс остановлен / уничтожен.

Возможное решение

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

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