Wordpress登録時にDiscourseユーザーを自動作成

私のサイトではDiscourseConnect Providerを使用しているため、WordPressがDiscourseへのログインを管理しています。

ユーザーがWordPressに登録した際に、Discourseのユーザーも即座に作成され、Discourseの有効化メールが送信されることを期待しています。しかし、それは行われていないようです。

WordPressの設定で「ユーザーデータの同期」の項目を確認しました。

この説明によると、WordPressにログインした際にDiscourseのユーザーが作成されるはずですが、そのようには見えません。Discourseのユーザーは、Discourseサイトを訪問するまで作成されません。

私の連携が正しく機能していないのでしょうか?それとも、この説明を誤解しているのでしょうか?

よろしくお願いします!

こんにちは、@37Rbさん、状況は以下の通りです。

動画をご覧になった後、さらにご不明な点がございましたらお知らせください。

「いいね!」 2

これで理解できました。WordPressで「ログイン」すると新しいDiscourseユーザーが作成されるのですね。WordPressで「登録」しても新しいユーザーは作成されません。ユーザーは自分で登録でき、登録するとすぐにログイン状態になります。この時点ではログインしていますが、Discourseユーザーはいません。

WPからログアウトして再度WPにログインすると、Discourseユーザーが作成されます。今確認しました。

WordPressでは、WooCommerceサイトであり、ログインしていない状態で商品を購入すると自動的に登録されるため、メール認証を必須とはしていません。登録後初めてDiscourseにアクセスした際に、Discourseからのアドレス確認メールが届きます。

問題となるユーザーは、以下の両方の条件を満たすユーザーです。

  • WPで登録するが、ログアウトして再度ログインしない
  • Discourse(eコマースサイトのサポートサイト)にアクセスしない

WordPress/WooCommerceでは、自己登録はログインとして扱われ、登録後すぐにログイン状態とみなされます。自己登録時にDiscourseユーザーを作成し、ログアウトして再度ログインしたときだけ作成されるのではなく、何か方法はありませんか?

ライアンさん、プラグインがログイン後にユーザーを作成しているというのはその通りです。具体的には、プラグインはwp_loginフックを使用しています。WordPressにはuser_registerフックもありますが、プラグインがそれを使用しない理由は、このフックは詳細(特にメールアドレス)が検証されたかどうかに関わらず、WordPressデータベースにレコードが挿入された直後に発火するためです。

少し生意気なことを言いますが、もしそうなら、なぜWooCommerceはwp_loginフックをトリガーしないのか、という疑問がここにあるのではないでしょうか :slight_smile: しかし、より役立つ情報としては、もしWooCommerceが登録とログインの両方の直後に何かを発火させているのであれば、おそらく他のフックやフィルターが存在するでしょう。

私たちが(現時点では)この機能をプラグインに組み込んでいない理由は、あなたのケースからわかるように、WordPressではユーザーが作成/登録/ログインされる方法はたくさんあるためです。

しかし、あなたの特定のケースが機能するようにしてみましょう。まず、登録/自動ログインが発生した直後に発火するフックを見つける必要があります。具体的にどのように設定していますか?つまり、どのようなフローを使用していますか?具体的に、使用したドキュメントなどがあれば教えてください。

WooCommerceが混乱の原因になっていると疑っています。登録後に自動的にログインすることは、WordPressの機能ではなくWooCommerceの機能のようです。そして、彼らは意図的にログインアクションを発火させません。

これに使用する適切なWooCommerceフックを検索できます。適切なWooCommerceフックを見つけた場合、Discourseユーザーを作成するために呼び出すことができるWP Discourse関数または発火できるフックはありますか?

はい、適切なフックを見つけたら、次のようにDiscourseでユーザーを作成できます。

$user = get_user_by( 'id', $user_id );
$params = WPDiscourse\\Utilities\\Utilities::get_sso_params( $user );
WPDiscourse\\Utilities\\Utilities::sync_sso_record( $params, $wp_user_id )

このコンテキストでは、新しいユーザーの user_id を取得できると仮定しています。

「いいね!」 2

woocommerce_created_customer アクションはうまく機能するようです。

上記のコードに加えて、メールアドレスを検証済みとしてマークするためにも、これも役立ちます。

delete_user_meta( $user_id, 'discourse_email_not_verified' );

今のところ、うまくいっています。助けてくれてありがとう!!!

「いいね!」 1

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.