Created
May 15, 2023 17:41
-
-
Save jmarreros/11012767eae22df6732731148e0cf1fa to your computer and use it in GitHub Desktop.
Add multiple products to cart via URL WooCommerce
This file contains 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
<?php //remover esta línea | |
function dcms_add_multiple_products_to_cart( $url = false ) { | |
if ( ! class_exists( 'WC_Form_Handler' ) || empty( $_REQUEST['add-to-cart'] ) || false === strpos( $_REQUEST['add-to-cart'], ',' ) ) { | |
return; | |
} | |
remove_action( 'wp_loaded', array( 'WC_Form_Handler', 'add_to_cart_action' ), 20 ); | |
$product_ids = explode( ',', $_REQUEST['add-to-cart'] ); | |
$count = count( $product_ids ); | |
$number = 0; | |
foreach ( $product_ids as $id_and_quantity ) { | |
$id_and_quantity = explode( ':', $id_and_quantity ); | |
$product_id = $id_and_quantity[0]; | |
$_REQUEST['quantity'] = ! empty( $id_and_quantity[1] ) ? absint( $id_and_quantity[1] ) : 1; | |
if ( ++$number === $count ) { | |
$_REQUEST['add-to-cart'] = $product_id; | |
return WC_Form_Handler::add_to_cart_action( $url ); | |
} | |
$product_id = apply_filters( 'woocommerce_add_to_cart_product_id', absint( $product_id ) ); | |
$was_added_to_cart = false; | |
$adding_to_cart = wc_get_product( $product_id ); | |
if ( ! $adding_to_cart ) { | |
continue; | |
} | |
$add_to_cart_handler = apply_filters( 'woocommerce_add_to_cart_handler', $adding_to_cart->get_type(), $adding_to_cart ); | |
if ( 'variable' === $add_to_cart_handler ) { | |
woo_hack_invoke_private_method( 'WC_Form_Handler', 'add_to_cart_handler_variable', $product_id ); | |
} elseif ( 'grouped' === $add_to_cart_handler ) { | |
woo_hack_invoke_private_method( 'WC_Form_Handler', 'add_to_cart_handler_grouped', $product_id ); | |
} elseif ( has_action( 'woocommerce_add_to_cart_handler_' . $add_to_cart_handler ) ){ | |
do_action( 'woocommerce_add_to_cart_handler_' . $add_to_cart_handler, $url ); | |
} else { | |
woo_hack_invoke_private_method( 'WC_Form_Handler', 'add_to_cart_handler_simple', $product_id ); | |
} | |
} | |
} | |
add_action( 'wp_loaded', 'dcms_add_multiple_products_to_cart', 15 ); | |
function woo_hack_invoke_private_method( $class_name, $methodName ) { | |
if ( version_compare( phpversion(), '5.3', '<' ) ) { | |
throw new Exception( 'PHP version does not support ReflectionClass::setAccessible()', __LINE__ ); | |
} | |
$args = func_get_args(); | |
unset( $args[0], $args[1] ); | |
$reflection = new ReflectionClass( $class_name ); | |
$method = $reflection->getMethod( $methodName ); | |
$method->setAccessible( true ); | |
$args = array_merge( array( $reflection ), $args ); | |
return call_user_func_array( array( $method, 'invoke' ), $args ); | |
} | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment