Skip to content

Añade la Opción de Regalar Productos en WooCommerce

¿Te gustaría ofrecer a tus clientes la opción de comprar productos como regalos en tu tienda en línea? Con este sencillo código, puedes añadir esta funcionalidad de una manera fácil y efectiva. En este artículo, te explicaré cómo puedes implementarlo en tu tienda y aprovechar todas sus ventajas.

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!

servicio mantenimiento wordpress

Tu WordPress en buenas manos

Soporte WordPress profesional y completo.