Hoy os traigo algo muy sencillo pero muy útil, se trata de añadir direccion de envio productos virtuales Woocommerce. Por defecto cuando marcas un producto de Woocomerce como producto virtual, automáticamente se elimina la posibilidad de añadir la dirección de envío.
Esto es muy lógico dado que si lo marcas como virtual es porque el producto no se va a enviar físicamente. El caso es que en un cliente me vi en la necesidad para hacer una promoción de Black Friday 2020 para poner gratis los gastos de envío. Como ya había varios plugins configurados con diferentes promociones tuve que recurrir a crear los productos de la promo como virtuales para que no tuvieran gastos de envío. El problema surge cuando el cliente quiere elegir la dirección de envío del producto porque solo le aparece la dirección de facturación.
Después de varias pruebas y muchas busquedas por Google encontre la solución en estas dos webs:
https://docs.wpdebuglog.com/plugin/woocommerce/4.0.0/filter/woocommerce_order_needs_shipping_address/
https://stackoverflow.com/questions/55466255/always-display-shipping-address-in-woocommerce-email-notifications
La solución en bastante sencilla, solo hay que añadir este pequeño código de php a vuestro archivo de funtions.php preferiblemente en el tema child, podéis revisar este tutorial de como crear el tema child.
Este es el codigo:
add_filter( ‘woocommerce_cart_needs_shipping_address’, ‘__return_true’, 50 );
Con esto ya tenemos la posibilidad de añadir direccion de envio productos virtualesde Woocommerce aunque sean virtuales.
Si vas a la orden de compra de Woocommerce se ve como se guarda la dirección de envío dentro del pedido:
Llegados a este punto parece que todo está solucionado ya que hemos podido añadir direccion de envio productos virtuales Woocommerce pero el cliente me dijo que en las notificaciones de administrador de Woocomerce no aparece la dirección de envío. Esto tiene su explicación igual que en el caso anterior. Al ser productos virtuales el sistema asume que no hay que poner la dirección de envío en ningún sitio.
Nuestra siguiente tarea es arreglar las notificaciones de woocommerce sin dirección de envío. Para ello debemos incluir mediante php un código que pase la dirección de envío que aparece en el pedido de woocommerce al email de notificación del administrador.
Este es el código que tenemos que añadir a nuestro archivo del tema Child funtions.php:
function enviar_direccion_productos_virtuales( $needs_address, $hide ) {
$needs_address = true;
return $needs_address;
}
add_filter( ‘woocommerce_order_needs_shipping_address’, ‘enviar_direccion_productos_virtuales’, 10, 2 );
Con esto ya conseguimos añadir direccion de envio productos virtuales Woocommerce y que aparezca la dirección de envío en las notificaciones para productos virtuales.