Hoy me pidieron agregar un producto variable (PDF descargable) a una tienda.
Haciendo pruebas vi que cuando se paga, se pide la dirección de facturación y opcionalmente la de envío.
Esos datos no son necesarios, ya que no habrá envío, y produce fricción.
Entonces decidí eliminar esos campos del checkout cuando solo se están comprando productos virtuales.
Lo primero es marcar el producto como Virtual y opcionalmente Descargable
El hook que se utilizará para este fin es
woocommerce_checkout_fields
Y para saber si solo tenemos productos virtuales usaremos la función:
$woocommerce->cart->needs_shipping()
Esta función nos regresa si se tiene un producto que necesita envío, es decir no son virtules.
Entonces si nos regresa false, procedemos a eliminar los campos:
unset($fields['billing']['billing_company']); unset($fields['billing']['billing_address_1']); unset($fields['billing']['billing_address_2']); unset($fields['billing']['billing_city']); unset($fields['billing']['billing_postcode']); unset($fields['billing']['billing_country']); unset($fields['billing']['billing_state']);
Aquí está el código completo:
<?php /* * Plugin Name: woo-simplify-downloads * Plugin URI: https://urano.dev/plugins * Description: Handle the basics with this plugin. * Version: 0.1.dev * Requires at least: 6.0 * Requires PHP: 8.1 * Author: Urano Dev * Author URI: https://urano.dev/software-para-ecommerce/ * License: GPL v2 or later * License URI: https://www.gnu.org/licenses/gpl-2.0.html * Update URI: https://urano.dev/plugins * Text Domain: my-basics-plugin * Domain Path: /languages */ add_filter('woocommerce_checkout_fields','udev_custom_checkout_fields'); function udev_custom_checkout_fields( $fields ) { global $woocommerce; $only_virtual = !$woocommerce->cart->needs_shipping(); //function to check if there are any physical product in the cart if($only_virtual) { unset($fields['billing']['billing_company']); unset($fields['billing']['billing_address_1']); unset($fields['billing']['billing_address_2']); unset($fields['billing']['billing_city']); unset($fields['billing']['billing_postcode']); unset($fields['billing']['billing_country']); unset($fields['billing']['billing_state']); } return $fields; }