Não costumo usar muitos plugins no WordPress, só quando preciso de funcionalidades hardcore. Faço tudo diretamente no tema, já que ele pode acessar todos os hooks da API do WordPress. Assim eu fiz na minha página de contato, que é embutida no tema do blog. Ela funciona muito bem e depende somente de funções internas do WP.
O template da página de contato
Vamos lançar mão do suporte a templates de página que o WordPress possui. Para isso, crie um arquivo chamado template-contact.php no diretório do seu tema.
Logo nas primeiras linhas do tema, adicione o seguinte:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | <?php /* * Template Name: Página de contato */ get_header(); ?> <div id="container"> <div id="content" role="main"> <form method="post" accept-charset="utf-8"> <?php if (isset($contact_form_error)) { ?> <div class="error"> <?php echo $contact_form_error; ?> </div> <?php } ?> <?php if (isset($contact_form_success)) { ?> <div class="success"> <?php echo $contact_form_success; ?> </div> <?php } ?> <div class="field"> <label for="contact-name">Seu nome:</label><br/> <input type="text" name="contact[name]" id="contact-name" value="<?php echo @esc_html($contact['name']); ?>"/> </div> <div class="field"> <label for="contact-email">Email:</label><br/> <input type="text" name="contact[email]" id="contact-email" value="<?php echo @esc_html($contact['email']); ?>"/> </div> <div class="field"> <label for="contact-message">Mensagem:</label><br/> <textarea name="contact[message]" id="contact-message"><?php echo @esc_html($contact['message']); ?></textarea> </div> <div class="buttons"> <button type="submit">Enviar mensagem</button> <button type="reset">Limpar</button> </div> </form> </div><!-- #content --> </div><!-- #container --> <?php get_footer(); ?> |
Vá até o painel de administração do WordPress e crie uma nova página. Coloque o título que desejar e selecione no box “Modelo” a opção “Página de contato” e publique. Agora abra a página recém criada.
Tratando o post do formulário
Precisamos tratar o POST do formulário, inserindo validações e mensagens de erro. Para isso, abra o arquivo functions.php do seu tema. Insira o seguinte código no final do arquivo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | function post_contact_form() { // Globais usadas no template global $contact, $contact_form_error, $contact_form_success; // Se os dados do formulário não foram passados, retorna if ( !isset($_POST['contact']) || !is_array($_POST['contact']) ) { return; } $contact = $_POST['contact']; // Verifica se todos os parâmetros foram passados if ( !isset($contact['name'], $contact['email'], $contact['message']) ) { return; } if ( empty($contact['name']) ) { // Nome vazio? $error = 'Por favor, digite seu nome'; } else if ( empty($contact['email']) ) { // Email vazio? $error = 'Por favor, digite seu endereço de email'; } else if ( empty($contact['message']) ) { // Sem mensagem? $error = 'Por favor, digite uma mensagem'; } else if ( !filter_var( filter_var($contact['email'], FILTER_SANITIZE_EMAIL), FILTER_VALIDATE_EMAIL) ) { // Email inválido? $error = 'Por favor, digite um email válido'; } else { // Passou na validação, agora formata o email... $time = date('H:i:s d/m/Y (e)'); $name = $contact['name']; $email = $contact['email']; $message = $contact['message']; $content = <<<__MENSAGEM Alguém enviou uma mensagem através do formulário de contato. Nome: $name Email: $email Data: $time IP: ${_SERVER['REMOTE_ADDR']} UA: ${_SERVER['HTTP_USER_AGENT']} Mensagem: ---------------------------------- $message ---------------------------------- __MENSAGEM; $admin_email = get_option('admin_email'); // ... e envia $sent = @wp_mail($admin_email, "[Via formulário de contato] $name", $content, "Reply-To: $email\n"); if ($sent) { // Foi enviado? $contact_form_success = 'Sua mensagem foi enviada com sucesso'; $contact = null; return; } else { // Ops, algum erro no momento do envio $error = 'Ops, ocorreu um erro ao enviar sua mensagem'; } } $contact_form_error = $error; } add_action('init', 'post_contact_form'); |
O básico está aí. Agora, você pode fazer validação com JavaScript, usar Ajax… deixe sua criatividade agir.