Created
July 3, 2019 12:30
-
-
Save sekanderb/4a08b055002cf6f2e64e354048c59f1c to your computer and use it in GitHub Desktop.
Adds the feature to add multiple products on WooCommerce Cart
This file contains hidden or 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
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