Neste artigo vamos-lhe dar a conhecer um método, e neste caso utilizando um plugin, para você criar um sistema de petições em uma instalação WordPress. É certo que a grande maioria das pessoas já tem noção que WordPress é uma plataforma super versátil e cheia de capacidades que pode ser usada muito para além de um simples blog. Então, decidimos entrar numa área um pouco mais afastada dos blogs, as petições online. Existem variadíssimos sites que oferecem um sistema de petições gratuito onde você pode criar a sua petição e de seguida partilhar com os seus amigos e conhecidos nas redes sociais. Mas e se você quiser criar uma petição na sua instalação WordPress? Sim, é possível. Neste artigo irá ficar a saber como criar um sistema de petições online na sua instalação WordPress, criando um simples plugin que irá fazer todo o trabalho por si. Este plugin é baseado no plugin criado por Barış Ünver no WP Tuts. Depois de criado o plugin, só irá necessitar de inserir os shortcodes e estilizar o seu formulário da petição ao seu gosto!

1. FUNÇÕES PRIMÁRIAS

Vamos necessitar de algumas funções que irão tornar o nosso plugin um pouco mais profissional e á prova de erros. Estas funções vão por exemplo fazer a validação de email, fazer o registo das novas entradas ou até fazer a busca pelas entradas existentes. Então começamos por criar a validação de e-mail.

Crie um novo ficheiro PHP e no início insira o seguinte:

/*
  Plugin Name: Petições Online
  Plugin URI: http://www.escolawp.com/
  Description: Plugin que permite criar petições em uma instalação WordPress
  Version: 1.0
  Author: Escola WordPress
  Author URI: http://www.escolawp.com/
  License: GPLv2 +
 */

De seguida aconselhamos inserir as informações da licença do plugin:

/*
 *      Copyright 2012 Aluno da Escola WordPress <mail@doaluno.com>
 *
 *      This program is free software; you can redistribute it and/or modify
 *      it under the terms of the GNU General Public License as published by
 *      the Free Software Foundation; either version 3 of the License, or
 *      (at your option) any later version.
 *
 *      This program is distributed in the hope that it will be useful,
 *      but WITHOUT ANY WARRANTY; without even the implied warranty of
 *      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *      GNU General Public License for more details.
 *
 *      You should have received a copy of the GNU General Public License
 *      along with this program; if not, write to the Free Software
 *      Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
 *      MA 02110-1301, USA.
 */

Depois de introduzidas estas informações iniciais, é hora de começar a programar. Então, para fazer a validação de e-mail insira o seguinte código:

function validate_email( $email ) {
    if ( $email == '' ) {
        return false;
    } else {
        return filter_var( $email, FILTER_VALIDATE_EMAIL );
    }
}

Esta função serve para a versão PHP5. Se utilizar a versão PHP4, utilize o código abaixo (utilize apenas uma delas, e nunca as duas em conjunto!)

function validate_email( $email ) {
    if ( $email == '' ) {
        return false;
    } else {
        $eregi = preg_replace( '/([a-z0-9_.-]+)' . '@' . '([a-z0-9.-]+){2,255}' . '.' . '([a-z]+){2,10}/i', '', $email );
    }
    return empty( $eregi ) ? true : false;
}

Agora é altura de criarmos a função quer irá fazer o registro das entradas da petição, e neste caso vamos utilizar os custom fields:

function submission( $name, $email, $date ) {
    global $post;
    $array = array( 'name' => $name, 'email' => $email, 'date' => $date );
    $petition_meta = serialize( $array );
    add_post_meta( $post->ID, 'petition_submission', $petition_meta );
    return true;
}

Depois de guardadas as entradas da petição, podemos buscá-las utilizando uma outra função:

function get_the_submissions( $number = 5 ) {
    $petition_meta = get_post_custom_values( 'petition_submission' );
    if ( $petition_meta ) {
        $output = array_slice( $petition_meta, $number * -1 );
        return array_reverse( $output );
    }
}

Naturalmente temos de associar algumas regras de estilização CSS para embelezar o sistema de petições. Então, insira o seguinte código no ficheiro style.css presente no diretório do seu theme:

#petition_form {}
#petition_form label {
    font-weight: bold;
    font-size: larger;
    line-height: 150%;
}
#petition_form input {
    display: block;
    margin: 5px 0;
    padding: 3px;
}
#petition_name {
    width: 200px;
}
#petition_email {
    width: 200px;
}
#petition_submit {
    padding: 5px;
}
.petition_success {
    color: #693;
}
.petition_error {
    color: #A00;
}
.petition_list {
    list-style: none;
    margin: 0;
    padding: 0;
}
.petition_list li {
    background-image: none !important;
}
.petition_list span {
    display: inline-block;
    width: 45%;
    padding: 1%;
    margin: 1%;
    background-color: #FAFAFA;
}
.submission_name {}
.submission_date {
    font-style: italic;
    color: #888;
}

2. SHORTCODES

Este plugin tira partido dos shortcodes para fazer a inserção dos campos da petição nos artigos. Então, desta forma você conseguirá ter controlo sobre onde coloca os elementos, podendo jogar e posicionar os mesmos de acordo com o seu gosto ou de acordo com aquilo que acha ser o melhor para quem vai assinar a petição. Então, começamos por criar o shortcode para o formulário de assinatura da petição:

function petition_form_sc( $atts ) {
    extract( shortcode_atts( array(

        'submit' => 'Enviar',

        'error' => 'Email inválido, por favor corrija.',

        'success' => 'A sua submissão foi introduzida com sucesso, obrigado!'
    ), $atts ) );
    $form = '<form action="'.get_permalink().'" method="post" id="petition_form">
        <label for="petition_name">Nome:</label>
        <input type="text" name="petition_name" id="petition_name" />
        <label for="petition_email">E-mail:</label>
        <input type="text" name="petition_email" id="petition_email" />
        <input type="submit" name="petition_submit" id="petition_submit" class="submit" value="'.$submit.'" />
    </form>';
    if ( $_SERVER['REQUEST_METHOD'] == 'POST' ) {

        $name = $_POST['petition_name'];

        $email = $_POST['petition_email'];

        $date = date( get_option( 'date_format' ) );

        if ( validate_email( $email ) == true ) {

            submission( $name, $email, $date );

            return '<div class="petition_success">' . $success . '</div>';

        } else {

            return '<div class="petition_error">' . $error . '</div>' . $form;
        }
    }

    else {
        return $form;
    }
}
add_shortcode( 'petition_form', 'petition_form_sc' );

O shortcode a utilizar é [petition_form]

Provavelmente em algum local da sua petição vai querer mostrar as assinaturas recolhidas. Então vamos criar um shortcode para isso:

function petition_list_sc( $atts ) {

    extract( shortcode_atts( array(

        'number' => ''
    ), $atts ) );

    $submissions = get_the_submissions( $number );

    $output = '<ul class="petition_list">';
    if ( $submissions ) {
        foreach( $submissions as $submission ) {

            $signer = unserialize( $submission );

            $signer = unserialize( $signer );

            $output .= '<li>';
            $output .= '<span class="submission_name">' . $signer['name'] . '</span>';
            $output .= '<span class="submission_date">' . $signer['date'] . '</span>';
            $output .= '</li>';
        }
    }
    $output .= '</ul>';
    return $output;
}
add_shortcode( 'petition_list', 'petition_list_sc' );

O sortcode a utilizar é [petition_list]

Além de mostrar as assinaturas recolhidas, seria ideal ter um número total das assinaturas. Então podemos criar também um shortcode que vai buscar o número total de assinaturas da petição:

function petition_count_sc() {
    $petition_meta = get_post_custom_values( 'petition_submission' );
    return count( $petition_meta );
}
add_shortcode( 'petition_count', 'petition_count_sc' );

O shortcode a utilizar é [petition_count].

3. UTILIZAÇÃO

Agora que já criámos todo o código necessário para que o plugin funcione,  vamos fazer uma demonstração da sua utilização. Primeiro vamos criar o artigo onde iremos inserir o texto da petição e os shortcodes:

Como criar um sistema de petições em WordPress

E aqui fica o resultado final em um artigo:

Como criar um sistema de petições em WordPress

Abraço!