Skip to content

Instantly share code, notes, and snippets.

@contemplate
Last active May 14, 2024 23:46
Show Gist options
  • 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 ( 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;
}
@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.

@contemplate
Copy link
Author

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