web-dev-qa-db-ja.com

異なるユーザーに重複した電子メールアドレスを許可する

異なるユーザーが同じEメールアドレスを共有できるようにする必要があります。 (自分のメールアドレスを持っていない可能性があるので、親が自分の子供のアカウントを作成するサイトを運営しているため、親は自分の子供のアカウントごとに自分のアカウントを使用する必要があります。)

私は他の提案を見たことがあります、その中には編集したコア(私はしたくない)が含まれます、しかし何もうまくいかないようです。

ユーザー作成時にemail_existsチェックをバイパスする方法について何かアイデアがありますか?

前もって感謝します。

P.S私は担当者を持っていないので、OPが解決策を見つけたかどうかを尋ねるために他の記事にコメントすることはできません。

4
mecnc

残念ながら、これは不可能です。 WordPressがこのチェックを実行する機会は3つあります。

  1. ユーザーの編集画面で「保存」をクリックすると( https://github.com/WordPress/WordPress/blob/master/wp-admin/includes/user.php#L157
  2. ユーザーが登録されている場合( https://github.com/WordPress/WordPress/blob/master/wp-includes/user.php#L202
  3. ユーザーがdtabaseに作成/挿入されたとき( https://github.com/WordPress/WordPress/blob/master/wp-includes/user.php#L161

(1)と(2)の両方にフックがあり、(WP_Error()オブジェクトに追加された)エラーメッセージを削除できるため、効果的にチェックをバイパスできます。

残念ながら、(1)と(2)の両方が(間接的に)wp_insert_user()を呼び出します。 wp_insert_user()wp_update_user()およびwp_create_user()の迷路が少しあります:))

(3)つまずきです。簡単に言えば、それを回避することはできません。

しかし、たとえcouldであったとしても、おそらくしないほうがよいでしょう。一意の電子メールが広く期待されているため、その事実に依存するプラグインを使用している可能性があります。 「パスワードを忘れた」機能を使用する場合、WordPress自体がこの事実に依存しています。

これにより、2つのオプションが得られます。

  • チャイルドアカウント用の「偽の」電子メールを作成します(ただし、電子メールが偽物である場合、電子メールが偽物であることを確認する必要があります-ドメインを使用しますか?)。さらに、そのようなアカウントに関連付けられた電子メールがnever使用されていることを絶対に確認したいでしょう。
  • 「ユーザー」アプローチを放棄し、CPTのようなものを使用します。しかし、これは多くのコードの地獄を書き換え、その一部はユーザーのセキュリティ(ログイン、パスワードの保存など)に関連します。それは実際には正気の選択ではありません。

残念ながらWordPressはユーザー関係管理用に設計されていません...

4
Stephen Harris

最初に次のコードを呼び出すと、新しいユーザー名で既存の電子メールアドレスを使用してユーザーを追加することが実際に可能であることがわかりました。

define('WP_IMPORTING',true);

この定数はコーデックスの wp-includes/user.php でチェックされます。

私はWordPressが独自のデータインポートの1つを実行するときに定義されると仮定して、重複したEメールアドレスによって引き起こされるエラーを回避します。

それが役立つことを願っています!

1
Robert Peake

私はこの問題についても調査していて、クライアントの要求に対して最善の解決策を見つけようとしています。

これを実現するには、ダミー/偽のEメール、および予備のEメールフィールドを作成する方法がいくつかあります。これはWP独自の電子メール要件を引き起こすことはありません。新しいフィールドは単に 'email2'というラベルを付けることができます。

'email2'はあなたが望む任意の情報を含むことができます[MySQLフィールド定義によって制限されます]。作成したら、両方のアカウントに同じEメールを追加します(私の場合は複数のアカウントに追加します)。

それからあなたのコードで、両方のアカウントがアクション/トリガー/アップデートなどのためにミラーリングされていることを確認してください...

たとえば、アカウント1に自動化されたメッセージやアカウントの更新などがある場合、あなたのコードは「email2 =現在ログインしているWP_userのemail2であるすべてのアカウントを更新する」を参照できます。

これは回避策ですが、ほとんどのクライアントの要求を満たすはずです。バックエンドで何が起こっているのかわかりません。しかし、彼らがログインすると、彼らは両方のアカウントの '複合'または 'ミラー'ビューを見るはずです。本質的に、それらはWP固有の電子メール、およびユーザー名の要件以外は同じです。

あなたもパスワードでこれを行うことができます。パスワードを「ミラーリング」することはできません。ただし、email2 =現在ログインしているユーザーのemail2 [wp_set_password]であるすべてのアカウントのパスワードを参照および更新/設定できます。

また、これはWP plugin [私のプラグインFYIではありません]があります:

https://wordpress.org/plugins/allow-multiple-accounts/ /

他の誰かが他の解決策を持っている場合は、ブレインストーミングして最善の解決策を見つけましょう。より良い解決策はありますか? #StackExchangeIsCool

0
John Pedersen