ソーシャルログインプラグイン(Wordpress Social Login、OneAllなど)は、管理ダッシュボードからの通常の登録として、元のwpデータベースにユーザーを作成しないようです。したがって、現在のユーザーに「通常の方法」でユーザーメタデータを追加または取得することはできません。
質問:Social Login登録ユーザーからユーザーメタを取得する方法は?
私は現在のケースを持っています、そして、彼が答えるのをまだ見つけていません。あなたが私を助けてくれることを願っています。
ケース このケースでは、登録ユーザーが新しいページを送信できるようにするGravityformがあります。私たちは彼らがユーザーごとに1ページだけを提出することを望みます。ページタイトルは自動的に作成され、ページタイトルの固有部分としてフォームのentry-IDを持ちます(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;
}
これで、フォームに正しく入力して現在ログインしているユーザーに、www.example.com/pagenumber{entry-ID}のように作成したページのURLを表示させることができます。したがって、表示するオプションは3つあります。
まず、フォームエントリIDを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 );
}
現在のユーザがログインしていてuser-metaにentry-IDを持っているかどうかをチェックし、そうであれば、entry-IDでurlを表示するために、page.php(またはページテンプレートファイル)に以下のコードを追加します。
<?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ユーザー(AdminダッシュボードのAdminによって作成されたユーザー)がログインし、フォームに正常に入力された場合、オプション(1)は有効/正常に表示されます。私たちは欲しかった。ユーザーがまだフォームに記入していない場合は、オプション(2)が有効/表示されます。
ソーシャルログインユーザーの問題: ソーシャルログインプラグインを介して登録されたユーザーがログインし、フォームに正常に記入した場合、ユーザーがフォームに記入したことがないようにオプション(2)が表示されます。
質問: / Social Login登録ユーザーからユーザーメタを取得する方法?**
使用しているプラグインを指定していません。しかし、ユーザーがOAuth(ほとんどのソーシャルプラットフォームで使用されている)でログインした場合、そのユーザーはWordPressにログインできません。
なぜ?
ユーザーがログインするには、ユーザー名と password が必要です。 OAuth(および他の方法)はパスワードを提供しません。彼らはYesと答えるだけです、このユーザは承認されていますまたはNo、承認されていません。
ソーシャルログインプラグインは、ユーザーがブログから新しいページを要求した場合にユーザーを再識別するためのメソッドを必要とします。このユーザーはにログインしています。 WordPressはクッキーを使用しています。別の方法はセッションを開始することです。ちょっと変わった方法でデータベースとIPアドレスを使うことができます。ソーシャルログインプラグインがどのようにユーザーを再識別するのかわかりませんが、これはなぜあなたのformularが動作しないのかを知るための重要なポイントです。
ユーザーがもうログインしていないのはなぜですか?
プラグインが再識別メソッドへの接続を失ったと思います。つまり、Cookieを読み取れないか、セッションが停止または破棄されました。
考えられる解決策
公式を表示しているときに、ユーザーがソーシャルログインでログインしている場合は、新しいユーザーをWordPressに登録し、このユーザーをログインします。これはダミーユーザーであり、実際のユーザー名は必要ありません。現在のユーザーがソーシャルログインでログインしているかどうかを確認し、ユーザーデータ(例:username)を取得し、このユーザーデータからハッシュを作成し、このハッシュをusername および passwordとして使用します。ユーザーが次にソーシャルログインでログインしたときに、このプロセスにフックしてユーザーデータを取得し、ハッシュを作成して、このハッシュを持つユーザーが存在するかどうかを確認します。
ソーシャルログインがどのようにユーザーを再識別するのか、また式が終了した後にユーザーが再識別されないのかを調べることもできます。