Case Variável 5
Plataforma de Crowdfunding com WordPress + Gravity Forms + Posts 2 Posts
variavel5.com.br
Text
Variável 5 Home Page
Tema
Theme Hybrid
e
Hybrid Core Framework
by
Justin Tadlock
http://themehybrid.com/
Home
Projetos
Outras páginas
Projeto
Arquitetura da informação
Categoria
Projeto
Categoria
Projeto
Categoria
Projeto
Categoria
Modelagem dos dados
Projeto
Tipo de projeto
Status
Valor total necessário
Valor já arrecadado
Total de cotas
Cotas vendidas
...
Recompensa
Valor da cota
Total de cotas
Cotas ilimitadas?
Qtd cotas já vendidas
Data de entrega
...
Usuário
1
*
*
*
*
*
ID Registro form
ID transação Paypal
Data da compra
Total
ID Recompensa
Qtd recompensas
ID Registro form
ID transação Paypal
Data da compra
Total
Dados cadastrais
Dados das compras
/* Cria custom post types e taxonomias */
add_action( 'init', 'v5_custom_postype_taxonomy' );
function v5_custom_postype_taxonomy() {
register_post_type('projeto');
register_post_type('recompensa');
register_taxonomy('status', 'projeto');
register_taxonomy('tipo-projeto', 'projeto');
}
Criando estruturas dos dados
Metadados são manipulados através do plugin Custom Field Suite
//conexao projeto<->recompensa
p2p_register_connection_type( array(
'name' => 'recompensa_to_projeto',
'from' => 'recompensa',
'to' => 'projeto',
'cardinality' => 'many-to-one',
'sortable' => 'to',
'admin_column' => 'any'
) );
Registrando conexões
Plugin Posts 2 Posts
//conexao projeto<->user para compra das cotas
p2p_register_connection_type( array(
'name' => 'variantes',
'from' => 'projeto',
'to' => 'user',
'duplicate_connections' => true,
'title' => 'Variantes',
'context' => 'advanced',
'sortable' => 'to',
'admin_column' => 'to',
'fields' => array(
'recompensa' => 'Recompensa',
'count' => 'Quantidade',
'entry' => 'Registro no form',
'paypal_id' => 'ID PayPal',
'data_compra' => 'Data da compra',
'total' => 'Valor total' ),
) );
Registrando conexões
Plugin Posts 2 Posts
//conexao user<->recompensa para as compras realizadas
p2p_register_connection_type( array(
'name' => 'user_to_recompensa',
'from' => 'user',
'to' => 'recompensa',
'duplicate_connections' => true,
'title' => 'Variantes',
'context' => 'advanced',
'admin_column' => 'from',
'fields' => array(
'entry' => 'ID Registro',
'data_compra' => 'Data da compra',
'paypal_id' => 'ID PayPal',
'total' => 'Valor total'
)
) );
Registrando conexões
Plugin Posts 2 Posts
Criando formulário
Gravity Forms
Fluxo do processo de compra
Usuário acessa página do projeto
projeto.php
- Exibe metadados de acordo com o status do projeto
-
Busca recompensas relacionadas
- Busca dados das recompensas
- Checa disponibilidade de cotas e gera botão
?p=80&projeto_id=3189&recompensa_id=3197
Escolhe recompensa
page-comprar-cota.php
Altera objeto do form antes de renderizá-lo, através do filtro gform_pre_render, inserindo as recompensas num campo Radio e armazenando alguns dados como ID do user em campos ocultos para uso posterior.
PayPal
Processa pagamento
gform_paypal_fulfillment
Após receber confirmação do PayPal, através da action gform_paypal_fulfillment, processa o pagamento atualizando os respectivos metadados e fazendo as devidas conexões usando o método p2p_type()->connect().
Buscando posts conectados
$query_recompensas = new WP_Query( array(
'connected_type' => 'recompensa_to_projeto',
'connected_items' => get_queried_object(),
'posts_per_page' => -1
) );
$query_recompensas = get_posts( array(
'connected_type' => 'recompensa_to_projeto',
'connected_items' => $_GET['projeto_id'],
'nopaging' => true
) );
Editando o formulário
add_filter('gform_pre_render_2', 'v5_edit_form_comprar_cota', 10, 1);
function v5_edit_form_comprar_cota( $form ) {
//Se não tiver ID do projeto retorna sem editar $form
if ( ! isset($_GET['projeto_id']) ) return;
// Itera sobre cada campo do formulário e edita o campo desejado
foreach ( $form['fields'] as &$field ) {
//Confere ID do campo produto para alterar somente ele
if( $field['id'] != 45 ) continue;
//Busca e itera sobre cada recompensa para adicionar no form
$recompensas = get_posts( ... );
foreach( $recompensas as $recompensa ) {
//Busca metadados da recompensa
//Checa se há cotas disponíveis antes de add no campo
//Checa se usuário já escolheu a recompensa
//Cria o array com as recompensas disponíveis
}
}
return $form;
}
Processando o pagamento
add_action('gform_paypal_fulfillment', 'v5_processa_pagamento', 10, 4);
function v5_processa_pagamento($entry, $config, $transaction_id, $amount) {
//Armazena e prepara dados enviados no form, $entry e $amount
/* Processamento dados da recompensa */
//Cria conexão entre o usuário e o projeto
p2p_type( 'variantes' )->connect( ... );
//Busca valor já arrecadado e qtd cotas já vendidas
//Soma com valores e qtd. da transação
//Atualiza metadados do projeto
/* Processamento dados da recompensa */
//Cria conexão do usuário com a recompensa
p2p_type( 'user_to_recompensa' )->connect( ... );
//Busca quantidade de cotas já vendidas da recompensa
//Soma com a qtd. da transação
//Atualiza metadados da recompensa
}
Criando conexão automaticamente
p2p_type( 'variantes' )->connect( $projeto_id, $user_id, array(
'recompensa' => $recompensa_id,
'count' => $qtd,
'entry' => $entry['id'],
'paypal_id' => $entry['transaction_id'],
'data_compra' => $data_compra,
'total' => $total_compra
) );
p2p_type( 'user_to_recompensa' )->connect( $user_id, $recompensa_id, array(
'entry' => $entry['id'],
'paypal_id' => $entry['transaction_id'],
'data_compra' => $data_compra,
'total' => $total_compra
) );
Metabox das conexões
Outras ferramentas usadas
Gravity Forms + Custom Post Types
Gravity Forms User Registration Add-on
Utimate Facebook (wpmudev)
Obrigado!
Marlon Lacerda Amâncio
marlon@naveguefeliz.com.br
Plataforma de Crowdfunding com WP + GF + P2P
By Marlon Lacerda Amâncio
Plataforma de Crowdfunding com WP + GF + P2P
- 1,325