En un artículo anterior habíamos visto cómo agregar un formulario de contacto sin plugins, sin embargo en este caso vamos a adaptar el código para mostrar un formulario de cotización en la página de productos de WooCommerce.
Resultado Final
Al final queremos obtener algo similar a lo que se muestra en la siguiente imagen:

Código PHP para solicitar cotización en la página de productos
Puedes agregar el siguiente código como parte del archivo functions.php de tu tema hijo.
<?php // No copiar este línea | |
add_action('woocommerce_share', 'dcms_show_request_quote_form'); | |
function dcms_show_request_quote_form(){ | |
global $product; | |
if ( isset($_GET['sent']) ){ | |
$message = $_GET['sent'] ? 'Solicitud enviada' : 'Hubo un error'; | |
echo "<p class='msg-request-quote'>$message</p>"; | |
return; | |
} | |
?> | |
<br> | |
<h3>Solicita una cotización</h3> | |
<form id="frm-quote" method="post" action="<?= admin_url( 'admin-post.php' ) ?>"> | |
<label for="name">Nombre:</label> | |
<input type="text" name="name" id="name" required> | |
<br> | |
<label for="email">Correo:</label> | |
<input type="email" name="email" id="email" required> | |
<br> | |
<label for="message">Mensaje:</label> | |
<textarea name="message" id="message" rows="6" required></textarea> | |
<br> | |
<input type="checkbox" id="terms" name="terms" required> | |
<label id="lbl-terms" for="terms">Acepto los <a href="#">Términos y Condiciones</a></label> | |
<br> | |
<input type="hidden" name="sku_product" value="<?= $product->get_sku() ?>"> | |
<input type="hidden" name="url_product" value="<?= get_permalink( $product->get_id() ) ?>" > | |
<input type="hidden" name="action" value="process_form_quote"> | |
<input id="submit" type="submit" name="submit" value="Enviar"> | |
</form> | |
<?php | |
} | |
// Hooks admin-post | |
add_action( 'admin_post_nopriv_process_form_quote', 'dcms_mail_request_quote' ); | |
add_action( 'admin_post_process_form_quote', 'dcms_mail_request_quote' ); | |
function dcms_mail_request_quote() { | |
$name = sanitize_text_field($_POST['name']); | |
$email = sanitize_email($_POST['email']); | |
$message = sanitize_textarea_field($_POST['message']); | |
$sku_product = sanitize_text_field($_POST['sku_product']); | |
$url_product = sanitize_url($_POST['url_product']); | |
$adminmail = "destino@dominio.com"; | |
$subject = "Solicitud cotización - producto $sku_product"; | |
$headers = "Reply-to: $name <$email>"; | |
$msg = "Nombre: $name \n"; | |
$msg .= "E-mail: $email \n\n"; | |
$msg .= "Mensaje: \n\n $message \n\n"; | |
$msg .= "Producto: $url_product \nSKU : $sku_product"; | |
$sendmail = wp_mail( $adminmail, $subject, $msg, $headers); | |
wp_redirect( home_url($url_product)."?sent=".$sendmail ); | |
} |
En el código anterior:
- Usamos el hook woocommerce_share que hace referencia a la función dcms_show_request_quote_form
- A través de esta función crearemos el código HTML del formulario
- Antes validamos si venimos de una respuesta, esto para mostrar el mensaje en lugar del formulario
- La otra parte del código usa los hooks para el procesamiento del formulario, ambos hacen referencia a la función dcms_mail_request_quote
- Parte del nombre del hook usado debe ser process_form_quote que es el que enviamos en el campo oculto del formulario
- Dentro de la función capturamos los datos del formulario y realizamos el envío de correo
Código CSS
Opcionalmente puedes usar el siguiente código CSS para dar un mejor aspecto al formulario, puedes agregar este código al final del archivo style.css de tu tema hijo.
.msg-request-quote{
background-color:orange;
color:white;
padding:10px 20px;
text-transform: uppercase;
}
#frm-quote{
padding:5px;
}
#frm-quote label{
display: block;
margin-top:10px;
}
#frm-quote textarea,
#frm-quote input{
width: 100%;
}
#frm-quote #lbl-terms{
display: inline-block;
margin-bottom: 15px;
}
#frm-quote #terms{
width: auto;
}
Conclusión
Como has podido comprobar, es posible agregar la funcionalidad de un formulario de cotización a los productos de WooCommerce de manera simple a través de código.
¿Aún con dudas?, en el siguiente código se detallan los puntos anteriores.
La entrada Formulario de cotización en WooCommerce sin plugins es un artículo reciente del sitio DecodeCMS.
0 Commentaires