Skip to content

Instantly share code, notes, and snippets.

@sekanderb
Created July 3, 2019 12:30
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save sekanderb/4a08b055002cf6f2e64e354048c59f1c to your computer and use it in GitHub Desktop.
Save sekanderb/4a08b055002cf6f2e64e354048c59f1c to your computer and use it in GitHub Desktop.
Adds the feature to add multiple products on WooCommerce Cart
class add_more_to_cart {
private $prevent_redirect = false; //used to prevent WC from redirecting if we have more to process
function __construct() {
if ( ! isset( $_REQUEST[ 'add-more-to-cart' ] ) ) return; //don't load if we don't have to
$this->prevent_redirect = 'no'; //prevent WC from redirecting so we can process additional items
add_action( 'wp_loaded', [ $this, 'add_more_to_cart' ], 21 ); //fire after WC does, so we just process extra ones
add_action( 'pre_option_woocommerce_cart_redirect_after_add', [ $this, 'intercept_option' ], 9000 ); //intercept the WC option to force no redirect
}
function intercept_option() {
return $this->prevent_redirect;
}
function add_more_to_cart() {
$product_ids = explode( ',', $_REQUEST['add-more-to-cart'] );
$count = count( $product_ids );
$number = 0;
foreach ( $product_ids as $product_id ) {
if ( ++$number === $count ) $this->prevent_redirect = false; //this is the last one, so let WC redirect if it wants to.
$_REQUEST['add-to-cart'] = $product_id; //set the next product id
WC_Form_Handler::add_to_cart_action(); //let WC run its own code
}
}
}
new add_more_to_cart;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment