Guardando datos de formulario personalizado en la base de datos
Soy nuevo en WordPress. He creado un formulario personalizado en WordPress y necesito saber dónde colocar el código PHP de WPDB para guardar los datos de mi formulario.
Intenté ponerlo directamente en mi página pero no funcionó.
Toda la investigación que he consultado dice que no lo coloque en el archivo functions.php, entonces ¿dónde debo ponerlo?
Aquí está el código que puse en mi página:
Código del Formulario
<form id="myForm" name="myform">
<select id="brandSel" size="1">
<option selected="selected" value="">-- Seleccionar Marca --</option>
<option>Abba</option>
<option>AG Hair</option>
</select>
<input type="submit" value="Enviar" />
</form>
Código PHP
<?php
global $wpdb;
$inputValue = $_POST['newValue'];
$wpdb->insert(
'catalog',
array(
'brandSel' => $inputValue
),
array( '%s' // si el tipo de campo es string )
);
?>

OK, así es como deberías hacerlo de forma correcta...
En tu archivo de plantilla colocas tu formulario:
<form id="myForm" name="myform" action="<?php echo esc_attr( admin_url('admin-post.php') ); ?>" method="POST">
<input type="hidden" name="action" value="save_my_custom_form" />
<select id="brandSel" size="1">
<option selected="selected" value="">-- Seleccionar Marca --</option>
<option>Abba</option>
<option>AG Hair</option>
</select>
<input type="submit" value="Enviar" />
</form>
Y en el archivo functions.php (o en tu plugin) tendrás que añadir admin_post_{action}
:
function my_save_custom_form() {
global $wpdb;
$inputValue = $_POST['newValue'];
$wpdb->insert(
'catalog',
array( 'brandSel' => $inputValue ),
array( '%s' ),
);
wp_redirect( site_url('/') ); // <-- aquí va la dirección del sitio a donde el usuario debe ser redirigido después de enviar el formulario
die;
}
add_action( 'admin_post_nopriv_save_my_custom_form', 'my_save_custom_form' );
add_action( 'admin_post_save_my_custom_form', 'my_save_custom_form' );

Puedes colocarlo en el functions.php de tu tema. Pero si ese formulario debe ser procesado por un plugin, entonces este código debería estar en tu plugin...
