Insertar datos en tablas personalizadas
Estoy tratando de crear tablas de entrada personalizadas para enviar datos a tablas personalizadas en la base de datos de WordPress. No logro que mi script funcione. El usuario ingresará un tipo de licor, como vodka o whiskey, proporcionará una descripción y lo enviará a la base de datos, donde hay tablas personalizadas dentro de la base de datos de WordPress. Tengo el código HTML en una página de WordPress y el PHP en un archivo llamado setLiquorType.php que está en la carpeta principal de WordPress.
Formulario HTML
<form method = "post" action = "setLiquorType.php">
Agregar un Nuevo Tipo de Licor</br></br>
<p>Nombre: <input type="text" name="name"/></p>
<p>Descripción <input type="text" name="description"/></p>
----------------------------------------------
<input type="submit" value="Enviar"/>
</form>
</br>
Mi script PHP
<?php
$name = $_POST['name'];
$global $wpdb, $name, $description;
$table_name = $wpdb->prefix . "Liquor Type";
$wpdb->insert($table_name, array(
'lq_name' => $lq_name,
'description' => $lq_descrip
),array(
'%s',
'%d')
);
}
?>
Cualquier ayuda sería genial

¿Dijiste que tu formulario está en la carpeta principal? Supongo que necesitas establecer la URL correcta para action=""
. Podrías probar:
action="<?php echo site_url() . '/setLiquorType.php'; ?>"
Es una mejor práctica poner el código de tu formulario en functions.php y dejar el action="" del formulario vacío. Luego puedes activar tu función de formulario cuando se envíe el formulario.
Tu HTML del Formulario:
<form method = "post" action = ""> //acción del formulario editada
<h3>Agregar un Nuevo Tipo de Licor</h3> //título envuelto en etiquetas <h3> y eliminado <br> porque el elemento h3 tendrá relleno que lo separará del formulario (si no está proporcionado en tu style.css, será asignado por el navegador)
<p> //envolviendo el campo en un párrafo para generar espacio automático entre ellos sin estilizarlo
<label for="name">Nombre:</label> //eliminado el elemento <p> y usado <label> en su lugar
<input type="text" name="name"/>
</p>
<p>
<label for="description">Descripción</label>
<input type="text" name="description"/>
</p>
<hr> //reemplazadas líneas --- innecesarias
<input type="submit" value="Enviar" name="liquor_submit"/> // añadido atributo name que se usará para verificar si el formulario se ha enviado
</form>
</br>
Ahora en tu functions.php puedes añadir algo como:
//configurando el formulario
function themename_add_new_liquor() {
$name = $_POST['name'];
$description = $_POST['description']; //Olvidaste recoger los datos del campo "description"
global $wpdb; //eliminadas $name y $description, no hay necesidad de asignarlas a una variable global
$table_name = $wpdb->prefix . "liquor_type"; //intenta no usar letras mayúsculas o espacios en blanco al nombrar tablas de la base de datos
$wpdb->insert($table_name, array(
'lq_name' => $name, //reemplazadas variables no existentes $lq_name y $lq_descrip, con las que configuramos para recoger los datos - $name y $description
'description' => $description
),
array(
'%s',
'%s'
) //reemplazado %d con %s - supongo que tu campo de descripción contendrá cadenas, no decimales
);
}
//Y ahora para conectar los dos:
if( isset($_POST['liquor_submit']) ) themename_add_new_liquor();
Espero que esto pueda ayudar. Además, nada de esto funcionará si no has creado tu tabla de base de datos en primer lugar (la función $wpdb->insert
se usa para insertar datos en una tabla existente).
