Este código permite a tus clientes marcar productos como regalos durante el proceso de compra, añadiendo campos personalizados en el checkout para introducir los datos del destinatario y un mensaje de regalo. Además, gestiona el envío de correos electrónicos tanto al comprador como al destinatario, mejorando así la experiencia de compra.
Pasos para Implementar el Código
1. Agregar el Campo «Regalable» en la Pantalla de Edición de Productos
Este código añade una casilla de verificación en la pantalla de edición de productos para permitir que los administradores marquen los productos como regalables.
add_action('product_options_general_product_data', 'add_giftable_checkbox');
function add_giftable_checkbox() {
woocommerce_wp_checkbox(array(
'id' => '_giftable',
'wrapper_class' => '',
'label' => __('Regalable', 'domain'),
'description' => __('Permitir que este producto sea comprado como un regalo.', 'domain')
));
}
add_action('process_product_meta', 'save_giftable_checkbox');
function save_giftable_checkbox($post_id) {
$is_giftable = isset($_POST['_giftable']) ? 'yes' : 'no';
update_post_meta($post_id, '_giftable', $is_giftable);
}
2. Adaptar el Formulario de Pago para Incluir Campos de Regalo
Solo se mostrarán estos campos si hay productos marcados como regalables en el carrito.
add_action('after_order_notes', 'add_gift_fields_to_checkout');
function add_gift_fields_to_checkout($checkout) {
$giftable_products = false;
foreach (WC()->cart->get_cart() as $cart_item) {
$product_id = $cart_item['product_id'];
if (get_post_meta($product_id, '_giftable', true) === 'yes') {
$giftable_products = true;
break;
}
}
if ($giftable_products) {
echo '<div id="gift_fields"><h2>' . __('¿Es para regalar?') . '</h2><p>Si esta compra es un regalo, rellena los datos de la persona a la que envías el regalo. Si no es un regalo, deja los espacios en blanco.</p>';
woocommerce_form_field('gift_recipient_email', array(
'type' => 'email',
'class' => array('gift-recipient-email form-row-wide'),
'label' => __('Correo Electrónico del Destinatario'),
'placeholder' => __('Ingrese el correo electrónico del destinatario')
), $checkout->get_value('gift_recipient_email'));
woocommerce_form_field('gift_recipient_name', array(
'type' => 'text',
'class' => array('gift-recipient-name form-row-wide'),
'label' => __('Nombre del Destinatario'),
'placeholder' => __('Ingrese el nombre del destinatario')
), $checkout->get_value('gift_recipient_name'));
woocommerce_form_field('gift_message', array(
'type' => 'textarea',
'class' => array('gift-message form-row-wide'),
'label' => __('Mensaje del Regalo'),
'placeholder' => __('Ingrese un mensaje personalizado para el destinatario')
), $checkout->get_value('gift_message'));
echo '</div>';
}
}
3. Validar el Campo de Correo Electrónico del Destinatario
Validamos que la dirección de correo electrónico del destinatario sea válida.
add_action('checkout_process', 'validate_gift_recipient_email');
function validate_gift_recipient_email() {
if (!empty($_POST['gift_recipient_email']) && !filter_var($_POST['gift_recipient_email'], FILTER_VALIDATE_EMAIL)) {
wc_add_notice(__('Por favor, ingrese una dirección de correo electrónico válida para el destinatario del regalo.', 'domain'), 'error');
}
}
4. Guardar los Campos Personalizados
Guardamos la información del destinatario y el mensaje del regalo en los meta campos del pedido.
add_action('checkout_update_order_meta', 'save_gift_fields');
function save_gift_fields($order_id) {
if (!empty($_POST['gift_recipient_name'])) {
update_post_meta($order_id, 'gift_recipient_name', sanitize_text_field($_POST['gift_recipient_name']));
}
if (!empty($_POST['gift_message'])) {
update_post_meta($order_id, 'gift_message', sanitize_textarea_field($_POST['gift_message']));
}
if (!empty($_POST['gift_recipient_email'])) {
update_post_meta($order_id, 'gift_recipient_email', sanitize_email($_POST['gift_recipient_email']));
}
}
5. Mostrar los Campos Personalizados en el Backend
Mostramos los datos del destinatario del regalo en la administración.
add_action('admin_order_data_after_billing_address', 'show_gift_fields_in_admin');
function show_gift_fields_in_admin($order) {
$gift_recipient_name = get_post_meta($order->get_id(), 'gift_recipient_name', true);
$gift_message = get_post_meta($order->get_id(), 'gift_message', true);
$gift_recipient_email = get_post_meta($order->get_id(), 'gift_recipient_email', true);
if ($gift_recipient_name) {
echo '<p><strong>' . __('Nombre del Destinatario del Regalo') . ':</strong> ' . $gift_recipient_name . '</p>';
}
if ($gift_message) {
echo '<p><strong>' . __('Mensaje del Regalo') . ':</strong> ' . $gift_message . '</p>';
}
if ($gift_recipient_email) {
echo '<p><strong>' . __('Correo Electrónico del Destinatario del Regalo') . ':</strong> ' . $gift_recipient_email . '</p>';
}
}
Conclusión
Este código facilita la compra de productos como regalos en tu tienda en línea, ofreciendo una experiencia más personalizada para los usuarios. Añade funcionalidad útil tanto para los compradores como para los administradores de la tienda, simplificando la gestión de regalos y mejorando la satisfacción del cliente.
Si deseas implementar este código en tu tienda, sigue los pasos descritos arriba. ¡Espero que sea de gran utilidad y mejore la experiencia de tus clientes!
Espero que este artículo te haya sido útil. Si tienes alguna pregunta o necesitas asistencia, no dudes en contactarme. ¡Felices ventas!