cliffordp
8/30/2016 - 10:46 PM

Event Tickets Plus and WooCommerce: Set child input based on forced quantity sync with parent input.

Event Tickets Plus and WooCommerce: Set child input based on forced quantity sync with parent input.

<?php
/**
  * Event Tickets Plus and WooCommerce:
  * Set child input based on forced quantity sync with parent input.
  * 
  * You need to edit the product IDs (1129 parent and 1128 child in this example code)
  *
  * From https://gist.github.com/cliffordp/5a769159a2bf64f0b1b1dbbde243d109
  * GIF preview: https://cl.ly/1F1N0h211b1w
  * 
  * Note: does not protect against user altering their WooCommerce cart after correct quantities got added to cart
  * For more robust protections against such user activity, you may need to refer to https://docs.woocommerce.com/document/group-bundle-products-woocommerce/
  */
function cliff_et_plus_woo_sync_quantity() {
	wp_enqueue_script( 'jquery' );
	?>
	<script type="text/javascript">
		jQuery(document).ready( function () {
			// Get the parent
			parent = jQuery( 'table.tribe-events-tickets input[name="quantity_1129"]' );
			
			// Get the child
			child = jQuery( 'table.tribe-events-tickets input[name="quantity_1128"]' );
			
			// Disable child input
			// child.prop( 'disabled', true ); // if input is disabled, will not be added to WooCommerce cart
			
			// Set child quantity to double the parent quantity when parent quantity changes
			jQuery( parent ).on( "input", child, function() {
				child.val( Math.ceil( parent.val() * 2 ) ) // should not need to round up to next integer but is good safety net in case formula changes
			});
			// Set parent quantity to half the parent quantity when child quantity changes
			jQuery( child ).on( "input", parent, function() {
				parent.val( Math.ceil( child.val() / 2 ) )
			});
		});
	</script>
	<?php
}
add_action( 'wp_footer', 'cliff_et_plus_woo_sync_quantity' );