Last active
May 14, 2024 23:47
-
-
Save contemplate/5c1909bd1bfcd485cc1bdaf8786f3a80 to your computer and use it in GitHub Desktop.
WooCommerce - Disable guest checkout for certain products when Guest checkout is Enabled globally
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/*-------------------------------------- | |
Woocommerce - Disallow Guest Checkout on Certain products | |
----------------------------------------*/ | |
// Display Guest Checkout Field | |
add_action( 'woocommerce_product_options_general_product_data', 'woo_add_disable_gc_fields' ); | |
function woo_add_disable_gc_fields() { | |
global $woocommerce, $post; | |
echo '<div class="options_group">'; | |
// Checkbox | |
woocommerce_wp_checkbox( | |
array( | |
'id' => '_disable_guest_checkout', | |
'label' => __('Checkout', 'woocommerce' ), | |
'description' => __('Disable Guest Checkout', 'woocommerce' ) | |
) | |
); | |
echo '</div>'; | |
} | |
// Save Guest Checkout Field | |
add_action( 'woocommerce_process_product_meta', 'woo_add_disable_gc_fields_save' ); | |
function woo_add_disable_gc_fields_save( $post_id ){ | |
$woocommerce_checkbox = isset( $_POST['_disable_guest_checkout'] ) ? 'yes' : 'no'; | |
update_post_meta( $post_id, '_disable_guest_checkout', $woocommerce_checkbox ); | |
} | |
// Disable Guest Checkout on Certain products | |
add_filter( 'pre_option_woocommerce_enable_guest_checkout', 'disable_guest_checkout_based_on_product' ); | |
function disable_guest_checkout_based_on_product( $value ) { | |
if ( is_checkout() && WC()->cart ) { | |
$cart = WC()->cart->get_cart(); | |
foreach ( $cart as $item ) { | |
if ( get_post_meta( $item['product_id'], '_disable_guest_checkout', true ) == 'yes' ) { | |
$value = "no"; | |
} else { | |
$value = "yes"; | |
break; | |
} | |
} | |
} | |
return $value; | |
} |
Works prefectly!
Awesome, thanks! Is there any way this can be applied to individual product variations? I need to allow guest checkout for an ebook file download, but must disable guest checkout for a LearnDash source.
Adjusted script to only run on checkout by adding is_checkout() &&
to the condition. We'll see if this still produces desired results.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Extended from original code from @mikejolley here: https://gist.github.com/mikejolley/5fadb94dd9eff11ab512
And opposite code here: https://gist.github.com/contemplate/2adc7be2c72d585a07ac6f90b1f1e1b4