Permitir endereço de e-mail duplicado para usuários diferentes

4

Eu preciso que usuários diferentes compartilhem o mesmo endereço de e-mail. (Executando um site onde os pais criam contas para seus filhos que podem não ter seu próprio endereço de e-mail, portanto, os pais precisarão usar o endereço dele para cada uma das contas das crianças.)

Eu já vi outras sugestões, algumas incluem o núcleo editado (que eu não quero fazer), mas nada parece funcionar.

Alguém tem alguma idéia sobre como ignorar a verificação de email_exists na criação do usuário?

Obrigado antecipadamente.

P.S. Como não tenho o representante, não posso comentar o outro post para perguntar se o OP encontrou uma solução.

    
por mecnc 12.05.2014 / 19:20

3 respostas

4

Infelizmente, isso não é possível. Existem três ocasiões em que o WordPress realiza essa verificação:

  1. Ao clicar em "salvar" na tela de edição do usuário ( enlace )
  2. Quando um usuário é registrado ( enlace )
  3. Quando um usuário é criado / inserido na dtabase ( enlace )

Ambos (1) e (2) têm ganchos após eles, o que permite que você remova qualquer mensagem de erro (adicionada a um objeto WP_Error() ) e, assim, efetivamente passando o teste.

Infelizmente, ambos (1) e (2) chamam (indiretamente) wp_insert_user() , e assim (3). (Há um pouco de labirinto de wp_insert_user() , wp_update_user() e wp_create_user() :))

(3) é o obstáculo. Basta colocar você não pode contornar isso.

Mas mesmo que você possa , provavelmente é melhor não fazê-lo. Como um e-mail exclusivo é amplamente esperado, talvez você esteja usando plug-ins que confiam nesse fato. O WordPress se baseia nesse fato quando você usa o recurso 'esqueci minha senha'.

Isso deixa você com duas opções:

  • Crie um e-mail "falso" para contas-criança (mas você precisa ter certeza de que o e-mail é falso e-mail dado é falso - talvez use seu domínio?). Além disso, você deseja ter absoluta certeza de que os e-mails associados a essas contas são nunca usados.
  • Abandone a abordagem "user" e use algo como um CPT. Mas isso iria reescrever um monte de código, alguns deles relacionados à segurança do usuário (por exemplo, login, armazenamento de senhas, etc.). Não é realmente uma escolha sensata.

Infelizmente, o WordPress não foi projetado para gerenciamento de relacionamento com o usuário ...

    
por Stephen Harris 12.05.2014 / 19:40
0

Eu estive examinando esse problema também e tentando encontrar a melhor solução para uma solicitação do cliente.

Existem algumas maneiras de conseguir isso, como os e-mails simulados / falsos, e criar um campo de e-mail secundário. O que não acionará o requisito de e-mail exclusivo do WP. O novo campo pode simplesmente ser rotulado como 'email2'.

'email2' pode conter qualquer informação desejada [limitada pela definição de campo do MySQL]. Uma vez criado, adicione o mesmo email nas duas contas (ou várias no meu caso).

Em seguida, no seu código, verifique se as duas contas estão espelhadas para ações / acionadores / atualizações, etc ...

Por exemplo, se a conta 1 tiver uma mensagem automática e / ou uma atualização de conta, etc ... Seu código pode fazer referência a 'atualizar todas as contas onde email2 = email2 do atual logado em WP_user'.

É uma solução, mas deve satisfazer a maioria das solicitações de clientes. Eles não verão o que está acontecendo no backend. Mas quando eles fazem o login, eles devem ver uma visão 'combinada' ou 'espelhada' de ambas as contas. Porque, em essência, eles são os mesmos que o e-mail exclusivo do WP e os requisitos de nome de usuário.

Você pode até fazer isso com senhas. Você não pode "espelhar" as senhas. No entanto, você pode fazer referência e atualizar / definir a senha de todas as contas em que email2 = email2 do usuário conectado atual [wp_set_password].

Além disso, existe este plugin WP [não meu plugin FYI]:

enlace

Se alguém tiver outras soluções, vamos discutir e descobrir as melhores soluções. Existem soluções melhores? #StackExchangeIsCool

    
por John Pedersen 16.11.2017 / 02:58
0

Descobri que é realmente possível adicionar um usuário com um novo nome de usuário, mas com um endereço de e-mail existente, se você chamar o seguinte código:

define('WP_IMPORTING',true);

Esta constante é verificada em wp-includes / user.php no codex.

Suponho que isso seja definido quando o WordPress executar uma de suas próprias importações de dados, para contornar os erros causados por endereços de e-mail duplicados.

Espero que ajude!

    
por Robert Peake 08.05.2018 / 14:51