Problema con Shortcode para Formulario de contacto personalizado
-
Hola!! Tengo un problema con mi código que no he podido detectar.
Estoy creando un formulario personalizado que reciba datos que serán almacenados en la BD. Este formulario se estará utilizando en varias páginas del website a través de un shortcode.
Ya tengo creado mi formulario pero el problema es que si coloco mi shortcode en 2 o más páginas de mi website y lleno y envío un formulario, en la BD se guarda el registro duplicado tantas veces como shortcodes haya colocado en mi website.
Por ejemplo, si coloco mi shortcode en 3 páginas diferentes y lleno el formulario sólo en una página, en la BD se guarda el registro 3 veces!!
No entiendo por qué ocurre esto. Este es un ejemplo de mi código:
<?php if ( ! defined( 'ABSPATH' ) ) exit; function create_db(){ global $wpdb; $table = $wpdb->prefix . "table_test"; $charset_collate = $wpdb->get_charset_collate(); $sql = "CREATE TABLE IF NOT EXISTS $table ( <code>id</code> mediumint(9) NOT NULL AUTO_INCREMENT, <code>name</code> text NOT NULL, <code>company</code> text NOT NULL, <code>email</code> text NOT NULL, UNIQUE (<code>id</code>) ) $charset_collate;"; require_once( ABSPATH . 'wp-admin/includes/upgrade.php' ); dbDelta( $sql ); } function form() { ?> <form action="<?php the_permalink(); ?>" method="post" id="subs_form"> <input type="text" name="fname" id="fname" placeholder="Name" value="<?php echo esc_attr($_POST['fname']);?>"> <input type="text" name="company" id="company" placeholder="Company" value="<?php echo esc_attr($_POST['company']); ?>"> <input type="text" name="email" id="email" placeholder="Email" value="<?php echo esc_attr($_POST['email']); ?>"> <input type="submit" name="submit_form" value="Enviar" class="et_pb_contact_submit et_pb_button"/> </form> <?php } function custom_shortcode(){ global $wpdb; create_db(); ob_start(); form(); $html = ob_get_clean(); if (isset( $_POST["submit_form"] ) ) { if ($_POST["fname"]!='' && $_POST["company"]!='' && $_POST["email"]!='') { $table = $wpdb->prefix."tb_colombeia"; $name = strip_tags($_POST["fname"], ""); $company = strip_tags($_POST["company"], ""); $email = strip_tags($_POST["email"], ""); $wpdb->insert( $table, array( 'name' => $name, 'company' => $company, 'email' => $email, ) ); $html = "<p>Form send</p>"; } else $html .= "<p>Error.</p>"; } return $html; } add_shortcode('MY_SHORTCODE', 'custom_shortcode'); ?>
Ayuda!
- El debate ‘Problema con Shortcode para Formulario de contacto personalizado’ está cerrado a nuevas respuestas.