Categories

Friday, November 22, 2024
#919814419350 therichposts@gmail.com
WoocommerceWoocommerce HooksWordpressWordpress Cheat CodesWordpress HooksWordpress Tricks

WooCommerce add multiple products to cart via hook

WooCommerce add multiple products to cart via hook

Hello guys how are you? Welcome back to my channel. Today in this post I am going to show you WooCommerce add multiple products to cart via hook.

Live Demo

Guys if you are new in WordPress or in WooCommerce then please check the below links for some good tutorials:

  1. WooCommerce Hooks
  2. WordPress Tricks
  3. WordPress Hooks

Guys your single URL for adding multiple products to cart will look like you can add your link button:

https://therichpost.com/woocommerce_tricks/cart/?add-to-cart=602,522

Add guys the following string to add more quantity: &quantity=3, so the URL will become

https://therichpost.com/woocommerce_tricks/cart/?add-to-cart=602&quantity=3

Also added multiple products add to cart on checkout page and URL will be like:

https://therichpost.com/woocommerce_tricks/checkout/?add-to-cart=602,522

Guys here is the working code snippet for Display coupon usage count and limit in WooCommerce thank you page and please use carefully:

1. Guys here is the code snippet and you need to add your theme’s functions.php file

function woo_add_multiple_products_to_cart( $url = false ) {
  // Make sure WC is installed, and add-to-cart qauery arg exists, and contains at least one comma.
  if ( ! class_exists( 'WC_Form_Handler' ) || empty( $_REQUEST['add-to-cart'] ) || false === strpos( $_REQUEST['add-to-cart'], ',' ) ) {
    return;
  }

  // Remove WooCommerce's hook, as it's useless (doesn't handle multiple products).
  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 ) {
    // Check for quantities defined in curie notation (<product_id>:<product_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 ) {
      // Ok, final item, let's send it back to woocommerce's add_to_cart_action method for handling.
      $_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 );

    // Variable product handling
    if ( 'variable' === $add_to_cart_handler ) {
      woo_hack_invoke_private_method( 'WC_Form_Handler', 'add_to_cart_handler_variable', $product_id );

    // Grouped Products
    } elseif ( 'grouped' === $add_to_cart_handler ) {
      woo_hack_invoke_private_method( 'WC_Form_Handler', 'add_to_cart_handler_grouped', $product_id );

    // Custom Handler
    } elseif ( has_action( 'woocommerce_add_to_cart_handler_' . $add_to_cart_handler ) ){
      do_action( 'woocommerce_add_to_cart_handler_' . $add_to_cart_handler, $url );

    // Simple Products
    } else {
      woo_hack_invoke_private_method( 'WC_Form_Handler', 'add_to_cart_handler_simple', $product_id );
    }
  }
}

// Fire before the WC_Form_Handler::add_to_cart_action callback.
add_action( 'wp_loaded', 'woo_add_multiple_products_to_cart', 15 );


/**
 * Invoke class private method
 *
 * @since   0.1.0
 *
 * @param   string $class_name
 * @param   string $methodName
 *
 * @return  mixed
 */
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( $class_name ), $args );
  $args = array_merge( array( $reflection ), $args );
  return call_user_func_array( array( $method, 'invoke' ), $args );
}

This is it guys and if you will have any kind of query, suggestion or requirement then feel free to comment below.

Jassa

Developer’s King

Thanks

therichpost
the authortherichpost
Hello to all. Welcome to therichpost.com. Myself Ajay Malhotra and I am freelance full stack developer. I love coding. I know WordPress, Core php, Angularjs, Angular 19, MedusaJs, Next.js, Bootstrap 5, Nodejs, Laravel, Codeigniter, Shopify, Squarespace, jQuery, Google Map Api, Vuejs, Reactjs, Big commerce etc.

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.