Soporte » WordPress Avanzado » Problema con Shortcode para Formulario de contacto personalizado

  • Resuelto anasiul05

    (@anasiul05)


    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!

Viendo 2 respuestas - de la 1 a la 2 (de un total de 2)
  • Moderador LGrusin

    (@lgrusin)

    Para los efectos es como si repitieras el mismo formulario.

    Crea un formulario diferente para diferentes páginas.

    Un saludo

    Gracias por tu respuesta LGrusin, me diste una idea y ya resolví el problema.

    Lo único que tenía que hacer era agregarle un ‘id’ a mi formulario a través del shortcode
    [my_shortcode id = «form-1»]
    [my_shortcode id = «form-2»]

    ya que, sin eso, efectivamente era como si repitiera el mismo formulario.

    Muchas gracias!

Viendo 2 respuestas - de la 1 a la 2 (de un total de 2)
  • El debate ‘Problema con Shortcode para Formulario de contacto personalizado’ está cerrado a nuevas respuestas.