Os requisitos para a utilização deste snippet são apenas a utilização do plugin:
E a utilização de um Child Theme.
Não é aconselhado colocar custom code dentro do functions.php do tema principal, pois o código desaparece sempre que o tema for atualizado.
function criar_user_from_cf7($cfdata) {
if (!isset($cfdata->posted_data) && class_exists('WPCF7_Submission')) {
$submission = WPCF7_Submission::get_instance();
if ($submission) {
$formdata = $submission->get_posted_data();
}
} elseif (isset($cfdata->posted_data)) {
$formdata = $cfdata->posted_data;
} else {
return $cfdata;
}
Começamos por abrir um função, colocando para já este pequeno excerto de código.
O que faz é ligação entre os resultados enviados pelos formulário CF7.
if ( $cfdata->title() == 'Registo para revendedores') {
$password = wp_generate_password( 12, false );
$name = $formdata['nome'];
$email = $formdata['email'];
$empresa = $formdata['empresa'];
$morada = $formdata['Morada'];
$cod_postal = $formdata['cod_postal'];
$cidade = $formdata['cidade'];
$pais = $formdata['pais'];
$telefone = $formdata['telefone'];
$telemovel = $formdata['telemovel'];
$nif = $formdata['nif'];
Nesta parte iremos selecionar o formulário pelo seu nome que já deverá estar criado posteriormente no CF7, neste caso o nome do formulário é “Registo para revendedores”.
Iremos então selecionar os campos colocando-os em variáveis, os campos são dependentes do formulário criado neste caso temos os seguintes campos:
- password -> No campo da password é utilizada a função “wp_generate_password” que requer os seguintes parâmetros comprimento da password (12) e se a password leva caracteres especiais (false) esta password será uma password temporária visto que o revendedor no final criará a sua password.
- name -> que equivale ao campo “nome” no CF7
- email-> que equivale ao campo “email” no CF7
- empresa-> que equivale ao campo “empresa” no CF7
- morada-> que equivale ao campo “Morada” no CF7
- cod_postal-> que equivale ao campo “cod_postal” no CF7
- cidade-> que equivale ao campo “cidade” no CF7
- pais-> que equivale ao campo “pais” no CF7
- telefone-> que equivale ao campo “telefone” no CF7
- telemovel-> que equivale ao campo “telemovel” no CF7
- nif-> que equivale ao campo “nif” no CF7
// Construct a username from the user's name
$username = strtolower(str_replace(' ', '', $name));
$name_parts = explode(' ',$name);
if ( !email_exists( $email ) ) {
// Find an unused username
$username_tocheck = $username;
$i = 1;
while ( username_exists( $username_tocheck ) ) {
$username_tocheck = $username . $i++;
}
$username = $username_tocheck;
// Create the user
$userdata = array(
'user_login' => $username,
'user_pass' => $password,
'user_email' => $email,
'nickname' => reset($name_parts),
'display_name' => $name,
'first_name' => reset($name_parts),
'last_name' => end($name_parts),
'role' => 'validar'
);
$user_id = wp_insert_user( $userdata );
//Fazer update meta data após criação da conta
update_user_meta($user_id, "billing_country", $pais );
update_user_meta($user_id, "shipping_country", $pais );
update_user_meta($user_id, "billing_postcode", $cod_postal );
update_user_meta($user_id, "shipping_postcode", $cod_postal );
update_user_meta($user_id, "billing_nif", $nif );
update_user_meta($user_id, "billing_phone", $telemovel );
update_user_meta($user_id, "billing_company", $telemovel );
Será então criado um username utilizando o nome colocado, verificando primeiro se já existe algum criado anteriormente, após confirmação de que não existe, passa-se então a criação da conta.
Após a criação da conta são então inseridos os user_meta utilizados no woocommerce, poderá aqui ser refenciado também, custom user meta criados, como é o exemplo do “nif”
if ( !is_wp_error($user_id) ) {
// Email login details to user
$blogname = wp_specialchars_decode(get_option('blogname'), ENT_QUOTES);
$message = "Bem Vindo! Os detalhes do seu login atuais são:" . "\r\n";
$message .= sprintf(__('Nome de Utilizador: %s'), $username) . "\r\n";
$message .= "A sua conta está em processo de validação." . "\r\n";
$message .= "Poderá fazer login no link abaixo após validação." . "\r\n";
$message .= wp_login_url() . "\r\n";
wp_mail($email, sprintf(__('[%s] A sua conta encontra-se em validação'), $blogname), $message);
}
}
}
return $cfdata;
}
add_action('wpcf7_before_send_mail', 'criar_user_from_cf7', 1);
No final caso não tenha ocorrido erro com a criação da conta será enviado o seguinte email, para o cliente.
Fica também a conta criada em backoffice com o role definido no code snippet anterior neste caso ele sendo “validar”
//ENVIAR E-MAIL QUANDO O ROLE É ATUALIZADO
function email_role_exchange( $user_id, $new_role ) {
$site_url = get_bloginfo('wpurl');
$user_info = get_userdata( $user_id );
$username = $user_info->user_login;
$user = new WP_User( (int) $user_id );
$adt_rp_key = get_password_reset_key( $user );
$rp_link = network_site_url("wp-login.php?action=rp&key=$adt_rp_key&login=$username" . rawurlencode($user_login), 'login');
if (user_can( $user_id, 'revendedor' ) ) {
// Email login details to user
$blogname = wp_specialchars_decode(get_option('blogname'), ENT_QUOTES);
$message = "Este e-mail confirma a sua validação " . $user_info->display_name . "\r\n" . "\r\n";
$message .= sprintf(__('Nome de Utilizador: %s'), $username) . "\r\n" . "\r\n";
$message .= "Poderá criar a sua password no seguinte link: " . $rp_link . "\r\n" . "\r\n";
$message .= "Poderá fazer login no link abaixo após validação." . "\r\n" . "\r\n";
$message .= wp_login_url() . "\r\n" . "\r\n";
wp_mail($user_info->user_email , sprintf(__('[%s] Confirmação de Validação de Conta'), $blogname), $message);
}
}
add_action( 'set_user_role', 'email_role_exchange', 10, 2);
Por fim, após fecharmos a anterior função. podemos criar uma distinta cujo objetivo é enviar email ao cliente(revendedor) quando o role for atualizado de “validar” para “revendedor” enviando um link de criação de password.
Fica assim criada uma forma de criar contas através do contact form 7, automaticamente apenas necessitando visualizar se os dados inseridos pelo cliente estão corretos e podendo enviar todos os dados para criação de password com o simples toque de um botão.
Alguma dúvida em relação ao post, podem deixar um comentário abaixo ou enviar e-mail para a.fernandes@afcreations.pt

This Post Has 0 Comments