Este manual te explica cómo procesar los datos enviados desde formulario de Blocko creado con un bloque personalizado en Gutenberg y almacenarlos en una tabla personalizada de WordPress mediante un hook.
1. Estructura básica del bloque de formulario
Asegúrate de que tu formulario incluye un campo oculto con el nombre type y valor landing para que el hook solo procese los formularios de tipo landing:
<!-- Campo oculto para tipo de formulario -->
<!-- wp:zd/field-hidden {"name":"type","value":"landing"} /--> Este bloque debe generar un <input type="hidden" name="type" value="landing" /> en el frontend.
2. Enviar los datos al process con do_action()
Cuando el usuario envía el formulario, necesitas llamar al siguiente hook para iniciar el proceso de guardado:
do_action( 'process_form', $form_data ); Asegúrate de que $form_data sea un arreglo con todos los datos del formulario.
3. Hook para procesar y guardar en base de datos
Agrega el siguiente código en tu plugin o archivo functions.php del tema hijo:
function lp_form_process_callback( $form_data ) {
if ( empty( $form_data['type'] ) || $form_data['type'] !== 'landing' ) {
return; // Solo procesamos formularios tipo landing
}
global $wpdb;
$data = array(
'time' => current_time( 'mysql' ),
);
// Campos permitidos y funciones de sanitización
$fields = array(
'name' => 'sanitize_text_field',
'phone' => 'sanitize_text_field',
'email' => 'sanitize_email',
'city' => 'sanitize_text_field',
'category' => 'sanitize_text_field',
);
foreach ( $fields as $key => $sanitize_callback ) {
if ( ! empty( $form_data[ $key ] ) ) {
$data[ $key ] = call_user_func( $sanitize_callback, $form_data[ $key ] );
}
}
// Insertar en tabla personalizada
$table_name = $wpdb->prefix . 'lp_messages';
$result = $wpdb->insert( $table_name, $data );
if ( ! $result ) {
wp_send_json_error( array(
'confirmationType' => 'message',
'confirmationMessage' => __( 'Database error:', 'zd' ) . ' ' . $wpdb->last_error,
) );
wp_die();
}
}
add_action( 'process_form', 'lp_form_process_callback', 1 ); 4. Resultado esperado
- Si el formulario contiene el campo oculto
type=landing, el hooklp_form_process_callbackse activará. - El contenido se saneará y guardará en la tabla personalizada
[prefix]_lp_messages. - Si ocurre un error en la base de datos, se devolverá una respuesta JSON con el mensaje.
5. ¿Dónde ver los mensajes enviados?
Los mensajes enviados desde el formulario de tipo landing se guardan en la tabla personalizada y pueden consultarse directamente en el panel de administración:
🔗 URL directa para ver los mensajes:
[MI_DOMINIO]/wp-admin/admin.php?page=lp_messages