Como colocar um formulário de contato no wordpress sem o uso de plugin
Postado por: Anderson Custódio de Oliveira emNada contra plugins, são muito bons, mas em determinadas situação é bom evitar, na minha opinião formulário de contato é uma delas, pois evita de ficar carregando o script do formulário em todas as página, desta forma que vou mostrar o script só carrega na própria página de contato. E para isso acontecer vamos criar um template especifico para página de contato.
Todos templates do wordpress tem o arquivo “page.php”, ele é o arquivo responsável em exibir todas páginas separadas, sabendo disto vamos fazer o seguinte: Entre na pasta do template, faça uma copia do “page.php” e romei-a para “contato.php” e abra a mesma em seu editor.
No topo dela vai ter o seguinte comentário.
/** * The template for displaying all pages. * ... */
Mude para:
/** * The template name: Contato * ... */
Este “The template name: Contato” é a linha que vai fazer toda a diferença, com isso este template vai aparecer na lista de “modelos” de página para selecionar.
Agora a única coisa que temos que fazer é um formulário de contato normal.
Copei este código logo após do comentário do topo, repare que uso a função “get_bloginfo()” para pegar o e-mail do admin.
< ?php
function h($str) {
return htmlentities($str);
}
function noempty($str) {
if (preg_match('/[a-z]/', $str))
return true;
else
return false;
}
if (isset($_POST['enviar'])) {
if (!noempty($_POST['nome']) or !noempty($_POST['assunto']) or !is_email($_POST['email']) or !noempty($_POST['msg'])) {
$_SESSION['info'] = 'Preencha todos campos corretamente.';
}
else {
$headers = 'From: ' . $_POST['email'] . "\r\n" .
'Reply-To: ' . $_POST['email'] . "\r\n" .
'X-Mailer: PHP/' . phpversion();
if(@mail(get_bloginfo('admin_email'), $_POST['assunto'], $_POST['msg'], $headers)) {
$_SESSION['info'] = 'E-mail enviado com sucesso.';
header('Location: http://' . $_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI']);
exit;
} else {
$_SESSION['info'] = 'Erro no servidor.';
}
}
}
?>
Agora o formulário, de preferencia abaixo da função “the_content()”.
<form method="post" action="" class="contato">
< ?php
if (isset($_SESSION['info'])) {
echo '<div class="info">' . $_SESSION['info'] . '';
unset($_SESSION['info']);
}
?>
<div>
<label for="nome">* Nome</label><br />
<input type="text" name="nome" value="<?php echo h(@$_POST['nome']) ?/>" id="nome" />
</div>
<div>
<label for="email">* E-mail</label><br />
<input type="text" name="email" value="<?php echo h(@$_POST['email']) ?/>" id="email" />
</div>
<div>
<label for="assunto">* Assunto</label><br />
<input type="text" name="assunto" value="<?php echo h(@$_POST['assunto']) ?/>" id="assunto" />
</div>
<div>
<label for="msg">* Mensagem</label><br />
<textarea name="msg">< ?php echo h(@$_POST['msg']) ?></textarea>
</div>
<div>
<input type="submit" name="enviar" value="Enviar" />
</div>
</form>
E está pronto, é só editar ou criar a página de contato e na hora de salvar selecionar o modelo “contato” nas opções “Atributos de Página”. Este é só um exemplo você pode faze o formulário como desejar.
[update]: Formulário de contato melhorado.














Suspeitei que seria um page template, tem ótimos plugins para formulário de contato, um exemplo é o http://wordpress.org/extend/plugins/contact-form-7/
Dica:
Alguns servidores reconhecem mensagens de e-mail enviadas via função mail do php como spam.
na function clear_post() ao invés daquelas variáveis receberem null, ficaria melhor se fosse unset($_POST);
Pelo que me lembro, o empty() não funciona quando você digitar espaços no formulário e da um submit!
Sobre o spam, existe o padrão RFC 822 que evita que o e-mail caia na caixa de spam, mas como o formulário é só para enviar mensagens para o dono do blog, não me preocupei com isso.
Normalmente eu verifico se o campo está vazio com expressão regular que diz que o campo tem que ter pelo menos uma letra de a-z, assim nem mesmo com o Alt+240 o campo não será aceito, mas para não complicar só usei empty.
Nos inputs do formulário tem um echo no array $_POST, caso a pessoa erre algum campo ela não tem que digitar de novo, se esse array em especifico não for declarado e o PHP estiver configurado para mostrar todos erros vai dar o seguinte erro “Notice: Undefined index: nome”, então este clear_post, não é só para limpar o campo quando o e-mail é enviado com sucesso, é também para declarar um valor null para evitar este erro nos campos assim que a pessoa abre a página, eu poderia usar um @$_POST nos echo dos input, mas como já tinha a função clear_post acabei usando ela.
Att.
Geralmente cai no spam quando o FROM não é do mesmo domínio do servidor que mandou o email.
No modelo de contato acima está assim e provavelmente irá pro SPAM direto.
A melhor solução é colocar o FROM pra ser TAMBÉM algum email interno do blog/domínio.
Daí a informação do email de quem escreveu o contato pode ir no corpo da mensagem.
Essa dica do template foi ótima e simples. Parabéns.
Muito foda, isso me ajudou não com o formulário + sim com modelos de páginas
[...] This post was mentioned on Twitter by Pinceladas da Web, Ruan Mér. Ruan Mér said: RT @pinceladasdaweb: Como colocar um formulário de contato no wordpress sem o uso de plugin http://t.co/FB3wQB3 [...]
Antes d td, quero agradecer…
OBTIVE o seguinte erro para o formulário de contato:
Parse error: syntax error, unexpected ‘/’ in /home/vhosts/poesiasdevida.freetzi.com/blog/wp-content/themes/arthemia/contato.php on line 76
EU TENHO OS SEGUINTE CÓDIGOS NO FORMULÁRIO DE CONTATO:
/**
* The template name: Contato
* …
*/
<div class="post" id="post_”>
<a href="/”>Home »
<?php the_content('Leia o resto desta página »’); ?>
‘Páginas: ‘, ‘after’ => ”, ‘next_or_number’ => ‘number’)); ?>
<?php edit_post_link('Edite esta entrada.', '’, ”); ?>
< ?php
if (isset($_SESSION['info'])) {
echo '’ . $_SESSION['info'] . ”;
unset($_SESSION['info']);
}
?>
* Nome
<input type="text" name="nome" value="” id=”nome” />
* E-mail
<input type="text" name="email" value="” id=”email” />
* Assunto
<input type="text" name="assunto" value="” id=”assunto” />
* Mensagem
COMO RESOLVER POR FAVOR? OBRIGADO!
MEU EMAIL É: meninodorio-38@hotmail.com
Ótimo post. Ótimo recurso.
É exatamente o que eu faço com algumas páginas. E eu adoro o wordpress por deixar que isso seja possível. Criando alguns modelos para as páginas me trouxe uma flexibilidade enorme.
[...] is the original post: Como colocar um formulário de contato no wordpress sem o uso de plugin » Pinceladas da Web –… Tags: forms, html, php, [...]
Olá, Essa função emptyempty(), você que criou ou é um erro no código?
Creio que foi bug do plugin para mostrar o código colorido, antes de enviar testei aqui e só copiei e coloquei no post, não estava asssim. ^^
Dá uma revisada no código ae que tem um errinhos. ex ?/>
Cara, muito massa a dica, tanto para a página de contato, quanto para qualquer modelo que for criado.
Valeu autarquia!!!
Eaew, esse post ajudou muito na hora de fazer formulário de contato.
Só estou com problemas na hora de enviar, depois de enviado ele não está mostrando a mensagem de “E-mail enviado com sucesso.” como deveria acontecer e nem preencha seu campo corretamente.
Oque devo estar fazendo que está dando errado?
Do mais está um show esse site!!
Abraços
verdade, acho que não criada essa função
Na linha 25, é só colocar no lugar do Header
echo “alert(‘Mensagem enviada com sucesso’); location.href=’http://’.$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI']“;
valeu, me ajudou a tirar uma enorme dúvida.
Olá, tem como colocar também um campo de envio de anexo?
Muito bom amigo, o melhor artigo que encontrei sobre o tema. Muito obrigado!
[...] { 24.$_SESSION['info'] = 'E-mail enviado com sucesso.'; 25.header('Location: http://' . $_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI']); 26.exit; 27.} else { [...]
Muito boa sua dica, me ajudou bastante, porem nao consigo fazer aparecer uma mensagem de confirmacao de envio…
ele envia mas nao mostra msg…
agradeco
[...] topo dela vai ter o seguinte comentário. view sourceprint? 1./** 2. * The template for displaying all pages. 3. * … [...]
Eu não consegui fazer funcionar…
mesmo tirando uns errinhos de código…
Uma dica é se vc não tiver muitos emails , é criar uma página de sac no sistema http://ww.regentte.com.br/regro/ro_comofunciona.htm e colocar na página, vc ainda consegue monitorar os emails pelo sistema
Não sei onde eu coloco o email da minha empresa, pofavor se alguem souber me ajude.
vai o código para vc’s verem
Formulário de Contato
Mensagem
LimparEnviar
Não sei onde eu coloco o email da minha empresa, pofavor se alguem souber me ajude.
vai o código para vc’s verem
veja no link : http://www.havanacomunicacao.com/imagem.bmp
2Não sei onde eu coloco o email da minha empresa, pofavor se alguem souber me ajude.
vai o código para vc’s verem
veja no link : http://www.havanacomunicacao.com/imagem.bmp
Tenho todas as dúvidas:
1ª – Você disse pra copiar o arquivo page.php e renomeá-lo para contato.php (fiz isso);
2ª – Você disse pra mudar o comentário pq assim a página apareceria na lista de modelos de páginas para selecionar (fiz isso apesar de nunca ter ouvido falar que comentário de código pudesse intervir em alguma coisa)
3ª – Você pede para colar o primeiro exemplo do seu código abaixo do comentário (fiz isso mas não sei se antes preciso remover o código que já estava no arquivo)
4ª – você pede pra colar o código do formulário abaixo da função “the_content()” (não existe esta função dentro do código do arquivo)
5ª – você disse para “na hora de salvar, selecionar o modelo “contato” nas opções “Atributos de Página”” (não conheço modelo “contato” nem atributo de página)
Portanto, se puder ser mais didático ficarei muitíssimo grato.
Como ficaria nesse caso a action do formulário?