Skip to content

Instantly share code, notes, and snippets.

@contemplate
Last active November 14, 2023 12:59
Show Gist options
  • Star 17 You must be signed in to star a gist
  • Fork 6 You must be signed in to fork a gist
  • Save contemplate/2adc7be2c72d585a07ac6f90b1f1e1b4 to your computer and use it in GitHub Desktop.
Save contemplate/2adc7be2c72d585a07ac6f90b1f1e1b4 to your computer and use it in GitHub Desktop.
WooCommerce - Allow guest checkout for certain products when Guest checkout is Disabled globally
/*--------------------------------------
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 ( 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;
}
@tylermrolfe
Copy link

If you want the guest checkout button to appear on all types of products rather than just simple, just remove this line:

'wrapper_class' => 'show_if_simple',

@SergeiStekh
Copy link

Hi. Everything works as expected, but on my checkout page for products with guest registration allowed still appear fields for registration: username, email, password, and also checkbox with question: "register?"

How can i remove this fields for certain products, with guest registration allowed?

@contemplate
Copy link
Author

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.

@contemplate
Copy link
Author

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

@Felix-Hmpl
Copy link

Felix-Hmpl commented Feb 24, 2023

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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment