web-dev-qa-db-ja.com

ソーシャルログイン登録ユーザーからユーザーメタを取得する方法

ソーシャルログインプラグイン(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つあります。

  1. ユーザーはログインしてページを作成しました - >ページURLを表示
  2. ユーザーはログインしていて、まだページを作成していません - >フォームを表示 - >完了後にポイント1にリダイレクト
  3. ユーザーがログインしていない - >ソーシャルログインボタンを表示 - >接続後にポイント2にリダイレクト

まず、フォームエントリ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登録ユーザーからユーザーメタを取得する方法?**

2
tobe

使用しているプラ​​グインを指定していません。しかし、ユーザーがOAuth(ほとんどのソーシャルプラットフォームで使用されている)でログインした場合、そのユーザーはWordPressにログインできません。

なぜ?

ユーザーがログインするには、ユーザー名と password が必要です。 OAuth(および他の方法)はパスワードを提供しません。彼らはYesと答えるだけです、このユーザは承認されていますまたはNo、承認されていません

ソーシャルログインプラグインは、ユーザーがブログから新しいページを要求した場合にユーザーを再識別するためのメソッドを必要とします。このユーザーはにログインしています。 WordPressはクッキーを使用しています。別の方法はセッションを開始することです。ちょっと変わった方法でデータベースとIPアドレスを使うことができます。ソーシャルログインプラグインがどのようにユーザーを再識別するのかわかりませんが、これはなぜあなたのformularが動作しないのかを知るための重要なポイントです。

ユーザーがもうログインしていないのはなぜですか?

プラグインが再識別メソッドへの接続を失ったと思います。つまり、Cookieを読み取れないか、セッションが停止または破棄されました。

考えられる解決策

公式を表示しているときに、ユーザーがソーシャルログインでログインしている場合は、新しいユーザーをWordPressに登録し、このユーザーをログインします。これはダミーユーザーであり、実際のユーザー名は必要ありません。現在のユーザーがソーシャルログインでログインしているかどうかを確認し、ユーザーデータ(例:username)を取得し、このユーザーデータからハッシュを作成し、このハッシュをusername および passwordとして使用します。ユーザーが次にソーシャルログインでログインしたときに、このプロセスにフックしてユーザーデータを取得し、ハッシュを作成して、このハッシュを持つユーザーが存在するかどうかを確認します。

ソーシャルログインがどのようにユーザーを再識別するのか、また式が終了した後にユーザーが再識別されないのかを調べることもできます。

1
Ralf912