-
-
Save contemplate/2adc7be2c72d585a07ac6f90b1f1e1b4 to your computer and use it in GitHub Desktop.
/*-------------------------------------- | |
Woocommerce - Allow Guest Checkout on Certain products | |
----------------------------------------*/ | |
// Display Guest Checkout Field | |
add_action( 'woocommerce_product_options_general_product_data', 'woo_add_custom_general_fields' ); | |
function woo_add_custom_general_fields() { | |
global $woocommerce, $post; | |
echo '<div class="options_group">'; | |
// Checkbox | |
woocommerce_wp_checkbox( | |
array( | |
'id' => '_allow_guest_checkout', | |
'label' => __('Checkout', 'woocommerce' ), | |
'description' => __('Allow Guest Checkout', 'woocommerce' ) | |
) | |
); | |
echo '</div>'; | |
} | |
// Save Guest Checkout Field | |
add_action( 'woocommerce_process_product_meta', 'woo_add_custom_general_fields_save' ); | |
function woo_add_custom_general_fields_save( $post_id ){ | |
$woocommerce_checkbox = isset( $_POST['_allow_guest_checkout'] ) ? 'yes' : 'no'; | |
update_post_meta( $post_id, '_allow_guest_checkout', $woocommerce_checkbox ); | |
} | |
// Enable Guest Checkout on Certain products | |
add_filter( 'pre_option_woocommerce_enable_guest_checkout', 'enable_guest_checkout_based_on_product' ); | |
function enable_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'], '_allow_guest_checkout', true ) == 'yes' ) { | |
$value = "yes"; | |
} else { | |
$value = "no"; | |
break; | |
} | |
} | |
} | |
return $value; | |
} |
Since some have asked I've created the opposite scenario here to disable guest checkout on certain products when it is globally enabled:
https://gist.github.com/contemplate/5c1909bd1bfcd485cc1bdaf8786f3a80
This helped me a lot!
Here are the instructions on how to install this plugin using only the wordpress dashboard:
Just add the php tags (<?php {plugin code} ?>
) and the metainformation comment. The comment is necessary for wordpress to recognize the plugin.
Here is an example:
<?php
/**
* Plugin Name: Your Plugin Name (mandatory)
* Plugin URI: Your Plugin URI
* Description: A brief description of what your plugin does.
* Version: 1.0 (mandatory)
* Author: Your Name (mandatory)
* Author URI: Your Website (mandatory)
* License: GPL2
*/
...
?>
Save this as a .php
file, store it in a folder and zip the folder. Then select this zipped folder, when you upload your plugin in the wordpress dashboard.
Adjusted script to only run on checkout by adding is_checkout() &&
to the condition. We'll see if this still produces desired results.
I've removed the
'wrapper_class' => 'show_if_simple',
line so that this will work on all product types now.
Guest Registration enabled does not remove the "Create an Account" option on the checkout page.