sexta-feira, 24 de dezembro de 2010

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

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.

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'] . '</div>';
                unset($_SESSION['info']);
            }
        ?>
        <div>
            <label for="nome">* Nome</label> 
            <input type="text" name="nome" value="<?php echo isset($_POST['nome']) ? h($_POST['nome']) : null ?>" id="nome" />
        </div>
        <div>
            <label for="email">* E-mail</label> 
            <input type="text" name="email" value="<?php echo isset($_POST['email']) ? h($_POST['email']) : null ?>" id="email" />
        </div>
        <div>
            <label for="assunto">* Assunto</label> 
            <input type="text" name="assunto" value="<?php echo isset($_POST['assunto']) ? h($_POST['assunto']) : null ?>" id="assunto" />
        </div>
        <div>
            <label for="msg">* Mensagem</label> 
            <textarea name="msg"><?php echo isset($_POST['msg']) ? h($_POST['msg']) : null ?></textarea>
        </div>
        <div>
            <input type="submit" name="enviar" value="Enviar" />
        </div>
</form>

Um pouco de CSS para deixar mais bacaninha.

form.contato label {
    display:block;
}

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". Esse é só um exemplo, você pode faze o formulário como desejar.

Nenhum comentário:

Postar um comentário