Julius'Lab

octubre 2019

Incrementar el valor campo en una entrada específica de acuerdo a una elección (Radio, dropdown o check)

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.

Incrementar el valor campo en una entrada específica de acuerdo a una elección (Radio, dropdown o check) Leer más »

(Unfinished) Cómo crear un «Constructor de Código» (Code Builder)

Con Formidable Forms podemos crear un «Constructor de Código» en caso de tener la necesidad de escribir un código complejo y recurrente sin tener que copiarlo y editarlo de la última instancia.

En este caso de ejemplo, se construirá un código para un shortcode frm-set-get que incluirá varios parámetros en secuencia.

Paso #1
Crear el formulario

With Formidable Forms we can create a «Code Builder» in case we need to write a complex and recurring code without having to copy and editing from the last instance.

In this example, we’ll build a code for a frm-set-get shortcode that will include several parameters in a sequence. This shortcode is suitable to feed a «Dynamic poll system» (ANOTHER ARTICLE). The resulting code will be something like:

Step #1
Create a form by the usual procedure and name it Codebuilder form (or as you like). In Settings>Form permissions activate the options «Limit form visibility to ADMINISTRATOR» (or any role you like to use the code builder) and «Allow front-end editing» with the correspondent permissions.

Step #2
In our new form, we start by inserting a Text field, and in its Key Field we’ll name it codebuilder-code. This will be the field which will hold the main resulting code. The field label can be something like «Code».

Step #3
Add a Hidden Field. In Default Value of the codebuilder-code field, insert this code:

(Unfinished) Cómo crear un «Constructor de Código» (Code Builder) Leer más »