Plataforma de Crowdfunding com WordPress + Gravity Forms + Posts 2 Posts
variavel5.com.br
Text
Variável 5 Home Page
Theme Hybrid
e
Hybrid Core Framework
by
Justin Tadlock
http://themehybrid.com/
Home
Projetos
Outras páginas
Projeto
Categoria
Projeto
Categoria
Projeto
Categoria
Projeto
Categoria
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');
}
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'
) );
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' ),
) );
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'
)
) );
Plugin Posts 2 Posts
Gravity Forms
Usuário acessa página do projeto
projeto.php
?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().
$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
) );
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;
}
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
}
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
) );
Gravity Forms + Custom Post Types
Gravity Forms User Registration Add-on
Utimate Facebook (wpmudev)
Marlon Lacerda Amâncio
marlon@naveguefeliz.com.br