Skip to content

Instantly share code, notes, and snippets.

@garagemwp
Last active February 22, 2021 18:49
Show Gist options
  • Save garagemwp/c320a48a688e13af00b80e4370c63a50 to your computer and use it in GitHub Desktop.
Save garagemwp/c320a48a688e13af00b80e4370c63a50 to your computer and use it in GitHub Desktop.
Action para não permitir que uma conta seja cadastrada no Woocommerce com um CPF já existente.
<?php
/*
Action para não permitir que uma conta seja cadastrada no Woocommerce com um CPF ou CNPJ já existente.
Esta action adiciona esta condicional para o campo de CPF ou CNPJ inserido pelo do plugin Extra Checkout Fields for Woocommerce
Você pode inserir este código no arquivo functions.php do seu tema.
*/
add_action('woocommerce_checkout_process', 'check_if_cpf_cnpj_exists');
function check_if_cpf_cnpj_exists() {
if( isset( $_POST['billing_cpf'] ) ){
$label = "CPF";
$args = array(
'meta_key' => 'billing_cpf',
'meta_value' => $_POST['billing_cpf']
);
}elseif( isset( $_POST['billing_cnpj'] ) ){
$label = "CNPJ";
$args = array(
'meta_key' => 'billing_cnpj',
'meta_value' => $_POST['billing_cnpj']
);
}
$user_cpf_cnpj_exists = get_users( $args );
if ( $user_cpf_cnpj_exists )
wc_add_notice( 'Já existe uma conta cadastrada com o ' . $label . ' informado.', 'error' );
}
?>
@celsoalmeidajr
Copy link

Olá, @garagemwp, parabéns pela iniciativa e obrigado por compartilhar! ;-)

Eu acrescentei um IF no inicio do bloco para que a validação ocorra somente quando o usuário não estiver logado, caso contrário usuários logados não conseguem realizar novas compras.

add_action('woocommerce_checkout_process', 'check_if_cpf_cnpj_exists');
function check_if_cpf_cnpj_exists() {

	if ( ! is_user_logged_in() ){
		if( isset( $_POST['billing_cpf'] ) ){
			$label = "CPF";
			$args = array(
				'meta_key' => 'billing_cpf',
				'meta_value' => $_POST['billing_cpf']
			); 
		}elseif( isset( $_POST['billing_cnpj'] ) ){
			$label = "CNPJ";
			$args = array(
				'meta_key' => 'billing_cnpj',
				'meta_value' => $_POST['billing_cnpj']
			); 
		}
		$user_cpf_cnpj_exists = get_users( $args );
	
		if ( $user_cpf_cnpj_exists )
			wc_add_notice( 'Já existe uma conta cadastrada com o ' . $label . ' informado.', 'error' );
	}
}

Você sabe qual hook nós poderiamos utilizar para replicar esta validação no formulário de edição do endereço de cobrança, já que os campos cpf e cnpj também são exibidos neste formulário?

@lari-ps
Copy link

lari-ps commented Feb 22, 2021

Oi pessoal boa tarde, blza?
Estou com problema com clientes que estão cadastrando emails diferentes para pegar o desconto que dou para clientes novos/primeira compra. Alguém ja usou essa Action? Funciona na boa? Sou super leiga, nem sei onde deveria coloca-la mas isso eu aprendo hehe...
Seria muito bom ter um plugin que tivesse essa função de identificar o cpf ja cadastrado.

Obrigada

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment