Tenemos un formulario de reclamos (trabajado con Elementor) y queremos que cada reclamos recibido tenga un codigo único.


Vamos a trabajar un código correlativo como R001, R002.

  1. Copia este código en el archivo function.php de WordPress.
  2. Para poder identificar el formulario:
    1. Agrega el ID “form_name” al formulario.
    2. Agrega el nombre “Libro de reclamaciones” al formulario.
  3. Debemos modificar el prefijo de nuetra base de datos. En este caso usamos “CJf2B6_” pero usualmente tienes algo como “wp_”.
  4. También en la misma línea debemos modificar el nombre de la tabla de la base de datos que aloja nuestros reclamos. En este caso estamos usando el submission de elementor por tanto usamos “_e_submissions” y “_e_submissions_values”.
  5. Si deseas renderizar el código de Reclamo generado en algun campo del Formulario, debes agregar el Campo y ponerle el ID “reclamos_id”.
				
					// Libro de Reclamaciones - Código único secuencial

add_action( 'elementor_pro/forms/validation', 'project_libro_reclamaciones_codigo_unico', 10, 2 );


function project_libro_reclamaciones_codigo_unico( $record, $handler ) {
    global $wpdb;
    
    // Verificar que se envíe desde el formulario del libro de reclamaciones.
    $form_name = $record->get_form_settings( 'form_name' ); 
    if($form_name != 'Libro de reclamaciones'){
        return;
    }
    
    // Buscamos el último lead enviado
    $fv_form = $wpdb->get_results("SELECT id FROM CJf2B6_e_submissions WHERE element_id = 'acdb477' ORDER BY id DESC LIMIT 1");
    
    // Tomamos el código
    $fv_val  = $wpdb->get_results("SELECT value FROM CJf2B6_e_submissions_values WHERE submission_id = ". $fv_form[0]->id ." AND `key` = 'reclamos_id'");
    
    // Si es el primer lead, se crear el primer código de la secuencia, sino, sumamos uno
    if($fv_val){
        $fv_id = (int)preg_replace('/[^0-9]/', '',$fv_val[0]->value);
        
        $reclamo_num = $fv_id + 1;
    }else{
        $reclamo_num = 1;
    }
        
    // Agregamos el código con el id aumentado, el LR puede variar según tu necesidad
    $reclamo_id = 'LR-'.sprintf("%04d", $reclamo_num);
    
    // Actualizamos el input hidden donde renderizamos el id del reclamo generado
    $record->update_field('reclamos_id', 'value', $reclamo_id);
    $record->update_field('reclamos_id', 'raw_value', $reclamo_id);
}