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
[php]woocommerce_checkout_fields[/php]
Y para saber si solo tenemos productos virtuales usaremos la función:
[php]
$woocommerce->cart->needs_shipping()
[/php]
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:
[php] 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']);
[/php]
Aquí está el código completo:
[php]
<?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;
}
[/php]