Este código permite incrementar (o decrementar) el valor de uno o varios campos específicos de acuerdo a la opción elegida en un campo de opciones de otro formulario.
El ejemplo asume la creación de dos formularios FormularioA (origen/captura) y FormularioB (destino).
El FormularioA, el origen, recibirá la elección del usuario. Puede ajustarse, si se desea, para no guardar las entradas recibidad. En este formulario deberá crearse los siguientes campos:
- Campo de opción (llamado YourChoice en este ejemplo), y asignar un valor diferente para cada opción (1, 2, 3 o lo que sea necesario). Deben ser diferentes para determinar la elección del usuario. En este caso ejemplo, contendrá tres opciones con los valores guardados 1, 2 y 3.
- Campo de número (llamado TheEntry en este ejemplo). Este número contendrá el id de la entrada del Formulario B a la cual irán los cambios.
El FormularioB es el formulario destino. Cualquier entrada de este formulario podrá ser referenciada en el campo TheEntry, del FormularioA. En este caso ejemplo, este FormularioB contendrá tres campos numéricos con nombre: Total1, Total2 y Total3, correspondientes a cada una de las opciones del campo YourChoice en el FormularioA. Cada campo podrá ser incrementado por 1
(en este ejemplo) de acuerdo a la opción elegida por el usuario, en la entrada correspondiente FormularioA/TheEntry.
Una vez designado esto, deberá agregarse el siguiente código a Functions.php (o utilizar el plugin Code Snippets (recomendado))
add_action('frm_after_create_entry', 'after_entry_created', 30, 2);
function after_entry_created($entry_id, $form_id){
if($form_id == 2){ //FormularioA (id:2)
global $wpdb;
$counter_ids = $_POST['item_meta'][7]; // [7] es el campo número en FormularioA (origen/captura) (id:2)
if($_POST['item_meta'][16] == 1){ // [16] es el campo YourChoice, 1 es el valor seleccionado.
$count_field = 12; //count_field=12 es el field_key del total1 (FormularioB id:3)
foreach ( (array) $counter_ids as $counter_id ) {
$total_get = FrmEntryMeta::get_entry_meta_by_field( $counter_id, $count_field, true );
$wpdb->update( $wpdb->prefix .'frm_item_metas', array( 'meta_value' => ( (int) $total_get+1 ) ), array( 'item_id' => $counter_id, 'field_id' => $count_field ) );
}//end of foreach
}//end of if post1
if($_POST['item_meta'][16] == 2){
$count_field = 13; //count_field=13 es el field_key del total2 (FormularioB id:3)
foreach ( (array) $counter_ids as $counter_id ) {
$total_get = FrmEntryMeta::get_entry_meta_by_field( $counter_id, $count_field, true );
$wpdb->update( $wpdb->prefix .'frm_item_metas', array( 'meta_value' => ( (int) $total_get+1 ) ), array( 'item_id' => $counter_id, 'field_id' => $count_field ) );
}//end of foreach
}//end of if post2
if($_POST['item_meta'][16] == 3){
$count_field = 14; //count_field=14 es el field_key del total3 (FormularioB id:3)
foreach ( (array) $counter_ids as $counter_id ) {
$total_get = FrmEntryMeta::get_entry_meta_by_field( $counter_id, $count_field, true );
$wpdb->update( $wpdb->prefix .'frm_item_metas', array( 'meta_value' => ( (int) $total_get+1 ) ), array( 'item_id' => $counter_id, 'field_id' => $count_field ) );
}//end of foreach
}//end of if post3
}//end of if($form_id == 2)
}//end of function
Las líneas 6 al 12 contienen un código que puede ser repetido para cada número de opciones.

