Son muchas las ocasiones en las que podemos necesitar añadir un extra en el pedido, que sea seleccionable por el cliente y que añada un determinado coste al pedido.

Un ejemplo muy típico de lo que os queremos enseñar hoy es el extra Envolver para regalo en el pedido, aunque en realidad las opciones de uso de este tipo de extras son prácticamente ilimitadas.

Ejemplo práctico y real

ComeFruta
Hace unos meses los chicos de ComeFruta, en colaboración con los chicos de Fiiiling, nos pidieron ayuda para poner en marcha la campaña Fruta solidaria. Gracias a ella los clientes de ComeFruta pueden donar 1,00 € a Acción Contra el Hambre para poner en marcha el proyecto Los jardines de la salud.

Paso 1

Producto oculto
Para poner en marcha la campaña solidaria lo primero que hicimos fue crear un producto en WooCommerce llamado Acción Contra el Hambre.

La verdad es que no sirve un producto normal, tiene que ser un producto oculto, en la captura de pantalla que tienes a la derecha de este párrafo puedes ver cómo se consigue hacer un producto oculto, para evitar que aparezca en el listado de productos a la venta en la tienda, y además no debe estar vinculado con ninguna Categoría de producto, para evitar el mismo problema, que aparezca en el listado de productos a la venta.

A este producto le añadimos un precio de 1,00 € y para que se vendiera sin IVA añadido, dado que es un donativo, le configuramos la opción Estado de impuestos a Ninguno.

Adicionalmente marcamos la opción Vendido individualmente en la pestaña Inventario para evitar que se añada más de una unidad al pedido.

Por último añadimos el logotipo de Acción Contra el Hambre como Imagen del Producto, y le pusimos una breve descripción para que en caso de que el cliente abra el producto, una vez añadido al pedido, vea en qué consiste esta ayuda.

El resultado final del producto oculto creado puedes verlo en ComeFruta.

Paso 2

Ayuda Acción Contra el Hambre

Captura de pantalla de Ayuda Acción Contra el Hambre antes de añadir el extra.

Una vez añadido el producto oculto que necesitábamos para añadir la ayuda a Acción Contra el Hambre en el pedido de WooCommerce, añadimos una función PHP al archivo functions.php del tema hijo, en este caso concreto del tema premium Flatsome, que hará que aparezca un enlace, tal y como el que se ve en la captura de pantalla que acompaña a este párrafo, para añadir la ayuda al pedido tanto en la página del carrito de la compra como en la del formulario de pedido.

Para hacer funcional la función debíamos conocer el ID del producto oculto que habíamos añadido. Para conocerlo sólo tuvimos que mirar la URL de edición del producto, que tendrá una estructura del tipo http://www.nombrededominio.ext/wp-admin/post.php?post=XXX&action=edit, donde XXX es el ID del producto.

Concretamente esta es la función PHP que añadimos al tema hijo de ComeFruta:

/*Ayuda Acción Contra el Hambre*/
function apg_ayuda_accion_contra_el_hambre() {
    global $woocommerce;
     
    $ayuda_accion = XXX;
    $encontrado = false;
     
    foreach ( $woocommerce->cart->get_cart() as $clave => $valor ) {
        $producto = $valor['data'];
        if ( $producto->id == $ayuda_accion ) {
            $encontrado = true;
        }
    }
     
    if ( !$encontrado ) {
?>

<tr class="shipping">

<th><?php _e( 'Ayuda', 'woocommerce' ); ?></th>


<td><a href="<?php echo do_shortcode(''); ?>"><?php _e( 'Acción Contra el Hambre (+1,00 €)' ); ?> </a></td>

    </tr>

<?php 
    }
}
add_action( 'woocommerce_cart_totals_after_shipping', 'apg_ayuda_accion_contra_el_hambre' );
add_action( 'woocommerce_review_order_after_shipping', 'apg_ayuda_accion_contra_el_hambre' );

Ayuda Acción Contra el Hambre añadido

Captura de pantalla de Ayuda Acción Contra el Hambre después de añadir el extra.

Lo que hace esta función PHP básicamente es comprobar, tanto en las páginas del carrito de la compra y del formulario de pedido, si el producto XXX se ha añadido al pedido o no. En caso negativo se introduce un pequeño código HTML que muestra el texto Ayuda, y un enlace con el texto Acción Contra el Hambre (+1,00 €), que sirve para añadir al pedido el producto oculto que creamos en el paso 1. El enlace lo puedes ver en la captura de pantalla que ilustra el paso anterior.

Paso 3

Finalmente, y para que los chicos de Fiiiling puedan contabilizar las ayudas abonadas por los clientes, tuvimos que añadir un código PHP en la página thankyou.php de WooCommerce. Esta página la tendrás que añadir al tema hijo dentro de la ruta woocommerce/checkout/.

El código PHP que añadimos es:

<?php //Ayuda Acción Contra el Hambre $productos = $order->get_items();
foreach ( $productos as $producto ) {
    if ( $producto['product_id'] == XXX ) {
        // Parámetros
        $parametros = array(
            'ecomtoken'     => 'tokenXXX',
            'fiuseremail'   => base64_encode( 'cuenta@nombrededominio.ext' ),
            'fiusername'    => 'Anonimo',
            'fiusernif'     => 'Anonimo',
            'fiuserpref'    => $order->get_order_number(),
            'fiuseramount'  => 100,
            'ecompassword'  => 'passwordXXX'
        );
         
        // Generación de firma
        $parametros['ecomsignature'] = sha1( $parametros['ecomtoken'] . $parametros['fiuseremail'] . $parametros['fiusername'] . $parametros['fiusernif'] . $parametros['fiuserpref'] . $parametros['fiuseramount'] . $parametros['ecompassword'] );
     
        echo '<img src="https://www.fiiiling.org/donate.gif?' . http_build_query($parametros) . '" width="1px" height="1px" />';
    }
}
?>

El código PHP se encarga de añadir una imagen de 1×1 píxeles que añade todos los parámetros necesarios para que Fiiiling pueda contabilizar la ayuda recibida en el proyecto en el que colabora, en este caso, ComeFruta.

Tanto los parámetros econtoken, como ecompassword son proporcionados por Fiiiling, son únicos e identifican inequívocamente al establecimiento colaborador. En cuanto a los parámetros fiuseremail, fiusername y fiuserpref no les añadimos los datos reales de los clientes para poder cumplir con la LOPD, de ahí que aparezcan los datos como Anonimo y con un correo electrónico de ComeFruta. En caso de que quisieras añadir los datos personales y reales del cliente que efectúa la donación tendrías que añadir un campo adicional en el formulario de pedido para que el cliente diese su consentimiento explícito, lo que conlleva añadir algo más de código tanto en este punto como en el anterior.

Obviamente este último paso sólo es necesario si necesitas implementar un servicio similar al que proporciona Fiiiling.

Conclusión

Como puedes ver, gracias a este pequeño código PHP puedes añadir un cargo extra a tu tienda online sin mayores complicaciones.

¿Qué utilidad vas a darle? Esperamos tus comentarios.