Permitir direcciones de correo electrónico duplicadas para diferentes usuarios

4

Necesito poder hacer que diferentes usuarios compartan la misma dirección de correo electrónico. (Al ejecutar un sitio en el que los padres crearán cuentas para sus hijos que pueden no tener su propia dirección de correo electrónico, por lo que los padres deberán usar la suya para cada una de las cuentas de los niños).

He visto otras sugerencias, algunas incluyen el núcleo editado (que no quiero hacer), pero nada parece funcionar.

¿Alguien tiene alguna idea sobre cómo omitir la comprobación de email_exists en la creación de usuarios?

Gracias de antemano.

P.S. Como no tengo el representante, no puedo comentar en la otra publicación para preguntar si el OP encontró una solución.

    
pregunta mecnc 12.05.2014 - 19:20

3 respuestas

4

Lamentablemente, esto simplemente no es posible. Hay tres ocasiones en las que WordPress realiza esta comprobación:

  1. Al hacer clic en 'guardar' en la pantalla de edición de usuario ( enlace )
  2. Cuando un usuario está registrado ( enlace )
  3. Cuando se crea / inserta un usuario en la base de datos ( enlace )

Tanto (1) como (2) tienen enlaces después de ellos que le permiten eliminar cualquier mensaje de error (agregado a un objeto WP_Error() ), y por lo tanto eludir el cheque.

Desafortunadamente, tanto (1) como (2) llaman (indirectamente) wp_insert_user() , y así (3). (Hay un poco de laberinto de wp_insert_user() , wp_update_user() y wp_create_user() :))

(3) es el escollo. En pocas palabras, no puedes rodearlo.

Pero incluso si pudieras , probablemente es mejor no hacerlo. Dado que se espera un correo electrónico único, es posible que esté utilizando complementos que confían en ese hecho. WordPress se basa en este hecho cuando utiliza la función 'contraseña olvidada'.

Esto te deja con dos opciones:

  • Cree un correo electrónico "falso" para las cuentas de niños (pero debería estar seguro de que el correo electrónico es falso, ya que el correo electrónico es falso, ¿quizás utilice su dominio?). Además, querrá estar absolutamente seguro de que los correos electrónicos asociados con dichas cuentas nunca se usan.
  • Abandonar el enfoque de "usuario" y usar algo como un CPT. Pero esto reescribiría un montón de código, parte del mismo relacionado con la seguridad del usuario (es decir, el inicio de sesión, el almacenamiento de contraseñas, etc.). No es realmente una elección sensata.

Lamentablemente, WordPress no está diseñado para la gestión de relaciones con los usuarios ...

    
respondido por el Stephen Harris 12.05.2014 - 19:40
0

También he estado investigando este problema e intentando encontrar la mejor solución para una solicitud de cliente.

Hay un par de maneras de lograr esto, como los correos falsos / falsos, y crear un campo de correo electrónico secundario. Lo que no activará el requisito de correo electrónico único de WP. El nuevo campo puede simplemente etiquetarse como 'email2'.

'email2' puede contener cualquier información que desee [limitada por la definición de campo de MySQL]. Una vez que se haya creado, agregue el mismo correo electrónico en ambas cuentas (o muchas más en mi caso).

Luego, en tu código, asegúrate de que ambas cuentas estén reflejadas para acciones / activadores / actualizaciones, etc. ...

Por ejemplo, si la cuenta 1 tiene un mensaje automatizado y / o una actualización de la cuenta, etc. ... Su código podría hacer referencia a 'actualizar todas las cuentas donde email2 = email2 del actual WP_user'.

Es una solución alternativa, pero debería satisfacer la mayoría de las solicitudes de los clientes. No verán lo que está pasando en el backend. Pero cuando inician sesión, deben ver una vista "combinada" o "duplicada" de ambas cuentas. Porque, en esencia, son los mismos que no son el correo electrónico exclusivo de WP y los requisitos de nombre de usuario.

Incluso puedes hacer esto con contraseñas. No puedes "reflejar" las contraseñas. Sin embargo, puede hacer referencia y actualizar / configurar la contraseña de todas las cuentas donde email2 = email2 del usuario actual registrado [wp_set_password].

También, existe este complemento WP [no es mi complemento FYI]:

enlace

Si alguien más tiene otras soluciones, intercambiemos ideas y encontremos las mejores soluciones. ¿Hay mejores soluciones? #StackExchangeIsCool

    
respondido por el John Pedersen 16.11.2017 - 02:58
0

Descubrí que en realidad es posible agregar un usuario con un nuevo nombre de usuario pero con una dirección de correo electrónico existente si primero llama al siguiente código:

define('WP_IMPORTING',true);

Esta constante se verifica en wp-includes / user.php en el códice.

Supongo que esto se define cuando WordPress ejecuta una de sus propias importaciones de datos, para evitar los errores causados por direcciones de correo electrónico duplicadas.

Espero que ayude!

    
respondido por el Robert Peake 08.05.2018 - 14:51

Lea otras preguntas en las etiquetas