Überschreiben Sie die function email_exists

Ich versuche, die function email_exists zu überschreiben, um die functionsweise etwas zu ändern. Es wird nicht als Pluggable-function aufgeführt, daher bin ich mir nicht sicher, wie ich vorgehen soll.

Ich möchte, dass folgendes passiert

  • Jemand versucht, sich mit einer bestehenden E-Mail-Adresse zu registrieren
  • WordPress erkennt, dass dies ein Duplikat ist
  • WordPress weist ihm stattdessen automatisch eine zufällige E-Mail-Adresse zu

Kann etwas mit Filtern gemacht werden?

UPDATE – — Ich habe das jetzt in meiner functionsdatei …

add_filter( 'pre_user_email', 'wpse163079_pre_user_email_example' ); function wpse163079_pre_user_email_example( $user_email ) { if ( email_exists( $user_email ) ) { $user_email = 'randomemail3452345@example.com'; return $user_email; } else { return $user_email; } } 

Aber das funktioniert nicht, es gibt mir immer noch die Nachricht: “Ein Konto ist bereits mit Ihrer E-Mail-Adresse registriert. Bitte loggen Sie sich ein’

Solutions Collecting From Web of "Überschreiben Sie die function email_exists"

Hinweis: Der Grund, warum dies nicht für das OP funktioniert, ist die Verwendung von Woocommerce, andernfalls sollte dies in Bezug auf core-WordPress-functionalität wie beschrieben funktionieren.


Aktualisieren:

Ich nahm an, dass es sich um E-Mails bei der Registrierung handelt. Gut, dass du deine Bedürfnisse angegeben hast. WordPress versucht – mehrere Prüfungen werden durchgeführt – um den neuen Benutzer mit wp_insert_user – source: user.php . Dort haben Sie den Filter pre_user_email , den Sie für Ihren Zweck verwenden können.

Die vorbildliche Verwendung wäre wie folgt:

 add_filter( 'pre_user_email', 'wpse163079_pre_user_email_example' ); function wpse163079_pre_user_email_example( $user_email ) { if ( email_exists( $user_email ) ) { // code that generates the random email address // do not forget to check if the random one does exist // assign random address as new $user_email then return $user_email; } else { return $user_email; } } 


Sie können email_exists() nicht überschreiben, da es sich nicht um eine Pluggable-function handelt. Aber ein Blick in die Quelle: user.php zeigt:

 function email_exists( $email ) { if ( $user = get_user_by('email', $email) ) return $user->ID; return false; } 

So verwendet email_exists() get_user_by() – source: pluggable.php -, das auf der anderen Seite eine Pluggable-function ist, damit man sie überschreiben kann. Wie Sie sehen, sieht get_user_by() so aus:

 function get_user_by( $field, $value ) { $userdata = WP_User::get_data_by( $field, $value ); if ( !$userdata ) return false; $user = new WP_User; $user->init( $userdata ); return $user; } 

Also kein Haken – Aktion oder Filter – du könntest verwenden. Aber es zeigt, dass dies hauptsächlich ein Wrapper für die functionalität der WP_User class ist – source: capabilities.php . Nachdem Sie sich die Methode get_data_by() der class WP_User angesehen haben, sehen Sie, dass kein Hook verfügbar ist.

Du hast nicht geschrieben, was du zu tun versuchst. Vielleicht können Sie erreichen, was Sie wollen, indem Sie einfach get_user_by() überschreiben. Eine andere Möglichkeit könnte sein extend die WP_User class zusätzlich zu extend . Ich kann wirklich nicht viel mehr mit den gegebenen Informationen sagen, aber dies sollte ein guter Ausgangspunkt für Sie sein.