Formulário de contato no WordPress sem usar plugins

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. :)

XDebug no XAMPP

Instalar o XDebug no XAMPP é muito simples, já que ele é distribuido junto o pacote de instalação do projeto. Basta descomentar a seguinte linha do arquivo php.ini:

1
zend_extension = "C:\xampp\php\ext\php_xdebug.dll"

Agora é só reiniciar o servidor Apache e pronto, XDebug funcionando.

Qual a diferença entre aspas simples e duplas no PHP?

Uma dúvida frequente entre iniciantes do PHP é quanto ao uso das aspas simples (‘) e duplas (“) no PHP. Elas fazem basicamente a mesma coisa: definir strings. Porém, o PHP interpreta cada uma de maneira diferente.

Experimente executar o código abaixo:

1
2
3
4
$myvar = 'teste';

echo "Isto é um $myvar\n\n"; //Observe as aspas duplas
echo 'Isto é um $myvar\n\n'; //Agora aspas simples

Conseguiu perceber a diferença? Usando aspas duplas o PHP interpreta as variáveis contidas dentro da string. Quando aspas simples são utilizadas, o PHP não interpreta nenhuma variável.

Podemos concluir que o uso de aspas simples torna mais rápida a execução do script. ;)

Ruby On Rails sem banco de dados

Se você quer desenvolver uma aplicação em Rails que não precisa de banco de dados, aí vai a dica:

Edite o arquivo config/environment.rb e insira a linha abaixo (caso ainda não exista):

1
config.frameworks -= [ :active_record ]

Isso vai fazer com que o Rails não carregue o ActiveRecord e você poderá desenvolver sua aplicação normalmente. :)

Brincando com o Canvas do HTML5

Canvas, pra quem não sabe, é um novo elemento do HTML5. Ele atua como uma tela, onde você pode desenhar, exibir fotos, criar animações, tudo através de JavaScript. Digamos que ele chegou para dar um chute na bunda do Flash.

Estou há meses querendo estudar um pouco sobre o elemento, mas só hoje a preguiça deixou tive tempo. Então, vou compartilhar as experiências aqui, com vocês. Continue lendo