-
-
Save Silver556/d199ab123343c7d5c6b1b8793bc63985 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 ( 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; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment