Voting System
[WordPress Plugin] Voting System
by Guilherme Mandeli · github.com/guilherme-mandeli/voting-system · website
Install
No release zip yet. The repository archive installs, but the folder name will carry the branch suffix and updates will not flow:
wp plugin install https://github.com/guilherme-mandeli/voting-system/archive/refs/heads/main.zip🗳️ Voting System - Plugin WordPress
Sistema completo de votações personalizado para WordPress com interface administrativa avançada, shortcodes flexíveis e sistema inteligente de unificação de respostas.
📋 Índice
- Características
- Requisitos
- Instalação
- Configuração
- Como Usar
- Shortcodes
- Estrutura do Projeto
- Funcionalidades Administrativas
- Sistema de Unificação
- Desenvolvimento
- FAQ
- Suporte
- Licença
✨ Características
🎯 Funcionalidades Principais
- Votações Personalizadas: Crie votações com perguntas dinâmicas e diferentes tipos de campos
- Interface Administrativa: Painel completo para gerenciamento de votações e resultados
- Sistema de Unificação: Agrupe respostas similares
- Shortcodes Flexíveis: Integre votações em qualquer página ou post
- Área do Usuário: Painel personalizado para usuários gerenciarem suas votações
- Feeds Públicos: Exiba listas de votações com filtros avançados
- Agendamento Automático: Configure datas de início e fim das votações
- Exportação CSV: Exporte dados para análise externa
- Responsivo: Interface adaptada para desktop e mobile
🔧 Tipos de Campo Suportados
- ✅ Texto livre (input text)
- ✅ Área de texto (textarea)
- ✅ Seleção única (radio buttons)
- ✅ Seleção múltipla (checkboxes)
- ✅ Lista suspensa (select dropdown)
🛡️ Segurança
- Validação rigorosa de dados
- Proteção contra CSRF com nonces
- Sanitização de entrada e escape de saída
- Verificação de permissões de usuário
- Prevenção de acesso direto aos arquivos
📋 Requisitos
Requisitos Mínimos
- WordPress: 5.0 ou superior
- PHP: 7.4 ou superior
- MySQL: 5.6 ou superior
- Memória PHP: 128MB (recomendado: 256MB)
Testado até
- WordPress: 6.4
- PHP: 8.2
🚀 Instalação
Método 1: Upload Manual
-
Baixe o plugin
git clone https://github.com/Guilherme-Mandeli/voting-system.git -
Faça upload para WordPress
- Compacte a pasta
voting-systemem um arquivo ZIP - Acesse
Plugins > Adicionar Novo > Enviar Plugin - Selecione o arquivo ZIP e clique em "Instalar Agora"
- Compacte a pasta
-
Ative o plugin
- Vá para
Plugins > Plugins Instalados - Encontre "Voting System" e clique em "Ativar"
- Vá para
Método 2: FTP
-
Upload via FTP
# Faça upload da pasta para: /wp-content/plugins/voting-system/ -
Ative no WordPress
- Acesse o painel administrativo
- Vá para
Pluginse ative o "Voting System"
Método 3: WP-CLI
# Clone o repositório
git clone https://github.com/Guilherme-Mandeli/voting-system.git /path/to/wordpress/wp-content/plugins/voting-system
# Ative o plugin
wp plugin activate voting-system
⚙️ Configuração
Configuração Inicial
-
Após a ativação, o plugin criará automaticamente:
- Custom Post Type
votacoes - Custom Post Type
votacao_resposta - Taxonomia
eventos - Páginas administrativas
- Custom Post Type
-
Verifique as permissões:
- Usuários com capacidade
manage_optionspodem gerenciar votações - Configure permissões adicionais conforme necessário
- Usuários com capacidade
-
Configure permalinks:
- Vá para
Configurações > Links Permanentes - Clique em "Salvar Alterações" para atualizar as regras
- Vá para
📖 Como Usar
Criando uma Votação
-
Acesse o menu administrativo
WordPress Admin > Votações > Adicionar Nova -
Configure a votação:
- Título: Nome da votação
- Descrição: Contexto e instruções
- Código: Identificador único (opcional)
- Ano: Ano de referência
- Status:
aberta,em-pausa, ouencerrada
-
Adicione perguntas:
- Use o metabox "Perguntas da Votação"
- Configure tipo de campo e opções
- Defina se a pergunta é obrigatória
-
Configure datas (opcional):
- Data de início
- Data de encerramento
- Agendamento automático
-
Publique a votação
Exibindo Votações
Formulário de Votação
[votacao_formulario id="123"]
Feed de Votações (Simples)
[votacoes_feed]
Feed da Página Inicial (Avançado)
[votacoes_home_feed]
Shortcode Genérico (Flexível)
[votacoes_display layout="cards" group_by="year" show_filters="true"]
Página de Agradecimento
[votacao_obrigado]
Criando Página do Usuário
Para criar uma página onde usuários podem gerenciar suas votações (recomendado: /votacoes):
- Crie uma nova página no WordPress
- Configure como restrita para usuários logados
- Adicione os shortcodes da área do usuário:
[votacoes_usuario_ativas]
[votacoes_usuario_encerradas]
[votacoes_disponiveis]
🎨 Shortcodes
Shortcodes Principais
[votacao_formulario]
Exibe o formulário de uma votação específica.
Parâmetros:
id(obrigatório): ID da votação
Exemplo:
[votacao_formulario id="123"]
[votacoes_display] (Shortcode Genérico)
Shortcode flexível para exibir votações com múltiplas configurações.
Parâmetros principais:
limit: Número máximo de votações (padrão: 10)layout: Tipo de layout - 'cards', 'list', 'grouped' (padrão: 'cards')group_by: Agrupar por - 'none', 'year', 'category', 'status' (padrão: 'none')show_filters: Mostrar filtros - true/false (padrão: false)show_status: Filtro por status - 'all', 'aberta', 'encerrada', 'em-pausa'hide_encerradas: Ocultar encerradas - true/false (padrão: false)only_active: Apenas ativas - true/false (padrão: false)
Exemplos:
# Básico - exibe 10 votações em cards
[votacoes_display]
# Lista apenas votações ativas
[votacoes_display only_active="true" layout="list"]
# Cards agrupados por ano com filtros
[votacoes_display group_by="year" show_filters="true" limit="20"]
# Feed completo com todas as funcionalidades
[votacoes_display limit="50" group_by="year" show_filters="true" show_time_remaining="true"]
[votacoes_home_feed]
Feed principal com cards visuais agrupados.
Parâmetros:
limit: Número de votações (padrão: 20)show_status: Filtrar por statushide_encerradas: Ocultar encerradasshow_filters: Exibir filtros (padrão: true)
Exemplo:
[votacoes_home_feed limit="30" hide_encerradas="true"]
[votacoes_feed]
Feed simples de votações.
Parâmetros:
ano: Filtrar por anostatus: Filtrar por statusevento: Filtrar por eventoposts_per_page: Número de itens por página
Exemplo:
[votacoes_feed ano="2024" status="aberta" posts_per_page="10"]
Shortcodes da Área do Usuário
[votacoes_usuario_ativas]
Lista votações que o usuário respondeu e ainda podem ser editadas.
Características:
- ✅ Restrição para usuários logados
- ✅ Filtra votações não encerradas
- ✅ Exibe resumo das respostas
- ✅ Botão "Editar Voto" quando permitido
- ✅ Botão "Ver Respostas" padrão
[votacoes_usuario_encerradas]
Lista votações que o usuário participou e já estão encerradas.
Características:
- ✅ Restrição para usuários logados
- ✅ Filtra votações encerradas
- ✅ Exibe status "Encerrada"
- ✅ Resumo das respostas do usuário
- ✅ Botão "Ver Respostas"
[votacoes_disponiveis]
Lista votações em aberto que o usuário ainda não participou.
Características:
- ✅ Restrição para usuários logados
- ✅ Filtra votações não respondidas
- ✅ Exibe prazo de encerramento
- ✅ Botão "Participar" destacado
- ✅ Descrição da votação
[votacao_obrigado]
Página de agradecimento pós-votação.
Características:
- ✅ Validação por token temporário
- ✅ Exibe resumo das respostas
- ✅ Informações da votação
- ✅ Links para outras ações
🏗️ Estrutura do Projeto
voting-system/
├── voting-system.php # Arquivo principal do plugin
├── bootstrap.php # Carregamento e inicialização
├── documentation.php # Documentação técnica
├── documentation-shortcodes.php # Documentação de shortcodes
├── README.md # Este arquivo
├── LICENSE # Licença GPL v2
│
├── assets/ # Recursos estáticos
│ ├── css/ # Arquivos de estilo
│ │ ├── admin.css # Estilos administrativos
│ │ ├── public.css # Estilos públicos
│ │ └── public/ # Estilos específicos
│ └── js/ # Scripts JavaScript
│ ├── admin.js # Scripts administrativos
│ ├── public.js # Scripts públicos
│ └── ajax/ # Handlers AJAX
│
├── includes/ # Funcionalidades principais
│ ├── core/ # Núcleo do sistema
│ │ ├── cpt/ # Custom Post Types
│ │ ├── tax/ # Taxonomias
│ │ ├── submission/ # Processamento de formulários
│ │ └── cron/ # Agendamento automático
│ │
│ ├── admin/ # Interface administrativa
│ │ ├── pages/ # Páginas administrativas
│ │ ├── menus/ # Menus e submenus
│ │ └── data/ # Exportação/Importação
│ │
│ ├── frontend/ # Interface pública
│ │ └── shortcodes/ # Shortcodes
│ │
│ └── ajax/ # Handlers AJAX
│ ├── get-user-votes.php
│ ├── vs-handle-get-unificacao-group.php
│ └── vs-handle-update-unificacao.php
│
├── helpers/ # Funções utilitárias
│ ├── vs-utils-data.php # Manipulação de dados
│ ├── vs-utils-css-loader.php # Carregamento de CSS
│ ├── vs-utils-permissions.php # Controle de permissões
│ ├── vs-utils-templates.php # Helpers de templates
│ └── vs-utils-votacoes.php # Funções de votações
│
├── metaboxes/ # Interface de edição
│ ├── vs-metabox-voting-info.php # Informações da votação
│ ├── vs-metabox-questions.php # Gerenciamento de perguntas
│ ├── vs-metabox-answer-details.php # Detalhes de resposta
│ └── view-metabox-questions.php # Visualização de perguntas
│
├── templates/ # Templates
│ ├── admin/ # Templates administrativos
│ │ ├── template-metabox-voting-info.php
│ │ ├── template-results-list.php
│ │ └── template-results-unificacao.php
│ │
│ └── public/ # Templates públicos
│ ├── template-voting-form.php
│ ├── template-thank-you.php
│ ├── template-votacoes-feed.php
│ ├── template-home-feed.php
│ ├── template-votacoes-usuario-ativas.php
│ ├── template-votacoes-usuario-encerradas.php
│ ├── template-votacoes-disponiveis.php
│ └── template-votacoes-generic-*.php
│
└── languages/ # Internacionalização
└── voting-system.pot # Arquivo de tradução
🔧 Funcionalidades Administrativas
Painel de Controle
- Dashboard: Visão geral das votações
- Gerenciamento: Criar, editar e excluir votações
- Resultados: Visualizar respostas e ranking
- Unificação: Agrupar respostas similares
- Exportação: Download de dados em CSV
Metaboxes de Edição
- Informações da Votação: Status, datas, código
- Perguntas: Adicionar e configurar perguntas
- Detalhes de Resposta: Visualizar respostas individuais
Páginas Administrativas
- Lista de Votações: Visão geral com filtros
- Detalhes de Resultados: Análise aprofundada
- Unificação de Respostas: Interface para agrupamento
🔄 Sistema de Unificação
Como Funciona
- Coleta: Respostas são armazenadas individualmente
- Análise: Administrador identifica respostas similares
- Agrupamento: Seleção de respostas para unificar
- Unificação: Criação de resposta unificada
- Aplicação: Atualização automática via AJAX
Benefícios
- Ranking: Dados facilitados
- Relatórios Limpos: Menos variações desnecessárias
- Insights Melhores: Padrões mais claros
- Exportação Organizada: CSV com dados unificados
Interface
- Seleção Visual: Checkboxes para escolher respostas
- Modal de Unificação: Interface intuitiva
- Contadores: Visualização de agrupamentos
- Histórico: Rastreamento de alterações
🛠️ Desenvolvimento
Estrutura de Hooks
Actions Disponíveis
// Antes de submeter voto
do_action('vs_before_vote_submit', $vote_data, $user_id);
// Após submeter voto
do_action('vs_after_vote_submit', $vote_id, $user_id);
// Antes de atualizar voto
do_action('vs_before_vote_update', $vote_id, $user_id);
// Após atualizar voto
do_action('vs_after_vote_update', $vote_id, $user_id);
Filters Disponíveis
// Modificar argumentos da query
$args = apply_filters('vs_generic_query_args', $args, $params);
// Modificar dados das votações
$votacoes = apply_filters('vs_generic_votacoes_data', $votacoes, $options);
// Modificar dados do template
$data = apply_filters('vs_generic_template_data', $data, $context);
// Modificar dados de exportação
$export_data = apply_filters('vs_export_csv_data', $data, $votacao_id);
Funções Utilitárias
Principais Helpers
// Recuperar perguntas da votação
$questions = vs_get_voting_questions($votacao_id);
// Formatar resposta para exibição
$resposta_formatada = vs_format_answer($resposta);
// Verificar se usuário já votou
$existing = vs_get_existing_response($user_id, $votacao_id);
// Atualizar metadados de resposta
vs_update_response_metadata($post_id, $votacao_id, $user_id, $respostas);
// Verificar status da votação
$is_encerrada = vs_check_votacao_status($data_fim);
Customização de Templates
Sobrescrever Templates
- Copie o template de
templates/public/para seu tema - Mantenha a estrutura de pastas:
seu-tema/voting-system/ - Modifique conforme necessário
Exemplo de Customização
// No seu tema: voting-system/template-voting-form.php
<?php
// Sua customização do formulário de votação
?>
❓ FAQ
Como criar uma votação?
- Vá para
Votações > Adicionar Nova - Preencha título e descrição
- Adicione perguntas no metabox
- Configure status e datas
- Publique
Como exibir votações na página inicial?
Use o shortcode [votacoes_home_feed] ou [votacoes_display] com os parâmetros desejados.
Como permitir edição de votos?
Marque a opção "Permitir edição" no metabox da votação.
Como exportar dados?
Na página de resultados, clique no link "Exportar CSV".
Como unificar respostas?
- Vá para a página de unificação da votação
- Selecione respostas similares
- Crie ou escolha uma resposta unificada
- Aplique a unificação
Como criar área do usuário?
- Crie uma página (ex:
/votacoes) - Adicione os shortcodes de usuário
- Configure restrição para usuários logados
📞 Suporte
Documentação
- Técnica:
documentation.php - Shortcodes:
documentation-shortcodes.php - Usuário: Este README
Contato
Contribuição
- Fork o projeto
- Crie uma branch para sua feature
- Commit suas mudanças
- Push para a branch
- Abra um Pull Request
📄 Licença
Este projeto está licenciado sob a GPL v2 ou posterior - veja o arquivo LICENSE para detalhes.
Desenvolvido com ❤️ por Guilherme Mandeli