-
-
Save BFTrick/7873168 to your computer and use it in GitHub Desktop.
<?php | |
/** | |
* Plugin Name: WooCommerce Remove Billing Fields for Free Virtual Products | |
* Plugin URI: https://gist.github.com/BFTrick/7873168 | |
* Description: Remove the billing address fields for free virtual orders | |
* Author: Patrick Rauland | |
* Author URI: http://patrickrauland.com/ | |
* Version: 2.0 | |
* | |
* This program is free software: you can redistribute it and/or modify | |
* it under the terms of the GNU General Public License as published by | |
* the Free Software Foundation, either version 3 of the License, or | |
* (at your option) any later version. | |
* | |
* This program is distributed in the hope that it will be useful, | |
* but WITHOUT ANY WARRANTY; without even the implied warranty of | |
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
* GNU General Public License for more details. | |
* | |
* You should have received a copy of the GNU General Public License | |
* along with this program. If not, see <http://www.gnu.org/licenses/>. | |
* | |
* @author Patrick Rauland | |
* @since 1.0 | |
*/ | |
function patricks_billing_fields( $fields ) { | |
global $woocommerce; | |
// if the total is more than 0 then we still need the fields | |
if ( 0 != $woocommerce->cart->total ) { | |
return $fields; | |
} | |
// return the regular billing fields if we need shipping fields | |
if ( $woocommerce->cart->needs_shipping() ) { | |
return $fields; | |
} | |
// we don't need the billing fields so empty all of them except the email | |
unset( $fields['billing_country'] ); | |
unset( $fields['billing_first_name'] ); | |
unset( $fields['billing_last_name'] ); | |
unset( $fields['billing_company'] ); | |
unset( $fields['billing_address_1'] ); | |
unset( $fields['billing_address_2'] ); | |
unset( $fields['billing_city'] ); | |
unset( $fields['billing_state'] ); | |
unset( $fields['billing_postcode'] ); | |
unset( $fields['billing_phone'] ); | |
return $fields; | |
} | |
add_filter( 'woocommerce_billing_fields', 'patricks_billing_fields', 20 ); | |
// That's all folks! |
When I use this code, the checkout fields only get smaller, they aren't removed entirely:
unset($fields['billing_company']); unset($fields['billing_address_1']); unset($fields['billing_address_2']); unset($fields['billing_city']); unset($fields['billing_postcode']); unset($fields['billing_country']); unset($fields['billing_state']); unset($fields['billing_phone']);
I tried using:
unset($fields['order']['order_comments']); unset($fields['billing']['billing_postcode']); unset($fields['billing']['billing_state']); unset($fields['billing']['billing_address_1']); unset($fields['billing']['billing_address_2']); unset($fields['billing']['billing_country']); unset($fields['billing']['billing_city']); unset($fields['billing']['billing_company']);
But then the checkout fields remained at full size
Any idea what I can do, please?
Hi, is there any new update code that also remove the field requirement ?
I've been using this code for almost 10 years now (see my original comment above), and it's been working great. I'm not sure if this is a recent issue or whether I've only just noticed, but this also stops people from being able to update their Billing Address details as it also removes these fields from the 'Edit Billing Address' page within your site's 'My Account' pages. To fix this, you just need to tweak the first if()
statement within the patricks_billing_fields()
function to check that you're not currently on an account page.
So... instead of the following:
if ( 0 != $woocommerce->cart->total ) {
replace it with the following:
if ( is_account_page() || 0 != $woocommerce->cart->total ) {
@maddisondesigns - Thanks for sharing this update! 🤓
@maddisondesigns - Thanks for sharing this update! 🤓
@BFTrick No probs. Thanks for this great code snippet. 🙂 It's kinda annoying that WooCommerce doesn't do this by default, for digital products.
Very nice work. Im trying to change this, so that I can achieve to not ask for the billing address if someone pays via cryptocurrencies, anyone can hint me about how to proceed?