Como colocar um formulário de contato no wordpress sem o uso de plugin

Postado por: Anderson Custódio de Oliveira em

Nada 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.

Posts Relacionados

Confira também outros artigos interessantes postados aqui no blog.

Gostou desse post?

Assine o nosso Feed RSS, siga-nos no Twitter, ou simplesmente nos recomende a seus amigos!

27 Responses to “Como colocar um formulário de contato no wordpress sem o uso de plugin”

  1. Senhor W disse:

    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!

    • ac disse:

      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.

    • Micox disse:

      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.

  2. Muito foda, isso me ajudou não com o formulário + sim com modelos de páginas

  3. [...] 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 [...]

    • Jean disse:

      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

  4. Ó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.

  5. [...] 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, [...]

  6. Olá, Essa função emptyempty(), você que criou ou é um erro no código?

  7. Fernando disse:

    Dá uma revisada no código ae que tem um errinhos. ex ?/>

  8. Neto disse:

    Cara, muito massa a dica, tanto para a página de contato, quanto para qualquer modelo que for criado.

    Valeu autarquia!!!

  9. 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

  10. johnatan disse:

    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.

  11. Ruan Natan Miranda disse:

    Olá, tem como colocar também um campo de envio de anexo?

  12. Muito bom amigo, o melhor artigo que encontrei sobre o tema. Muito obrigado!

  13. [...] { 24.$_SESSION['info'] = 'E-mail enviado com sucesso.'; 25.header('Location: http://' . $_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI']); 26.exit; 27.} else { [...]

  14. Marcelo disse:

    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

  15. [...] topo dela vai ter o seguinte comentário. view sourceprint? 1./** 2. * The template for displaying all pages. 3. * … [...]

  16. Felipe disse:

    Eu não consegui fazer funcionar…
    mesmo tirando uns errinhos de código…

  17. Eduardo disse:

    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

  18. Tiago disse:

    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

  19. 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.

  20. Anderson disse:

    Como ficaria nesse caso a action do formulário?

Leave a Reply