If you have a WooCommerce product with a lot of variations that are all the same price, entering/updating the price can be a little frustrating as you must update the price manually for each variation. For a product with three colour and size attributes this is only nine total variations, but if you could update the price for all nine with one click, surely you would? With a little bit of JavaScript added via an action hook, you can.
UPDATE: As it turns out, WooCommerce has added built-in support for the bulk editing of variations. While editing your product, after having added one or more variations, the “Add Variation” drop-down at the top of the Variations tab also includes a number of bulk edit options; you can set both regular and sale prices or modify either, increasing or decreasing by a percentage or set amount, for example.
Assuming you’re not using a very old version of WooCommerce, you can use the above and ignore the rest of this article.
We’ll make use of the woocommerce_product_data_panels
action hook, which is triggered after all of the panels in the “Product Data” metabox have been output, to include a few lines of JavaScript that will add a link next to the “Regular Price” field label of all variations. When clicked, this link will (after a confirmation dialog) use the price of the current variation to update all the other variations.
➡️Grow your team with a vetted GoWP Dedicated Developer. ⬅️
(Aug 20, 2015) As of WooCommerce version 2.4 the contents of the Variations tab are not loaded initially, so we’ve added a version check that waits until Variations have been loaded via AJAX before triggering the addition of our links.
add_action( 'woocommerce_product_data_panels', 'gowp_global_variation_price' ); function gowp_global_variation_price() { global $woocommerce; ?> <script type="text/javascript"> function addVariationLinks() { a = jQuery( '<a href="#">Apply to all Variations</a>' ); b = jQuery( 'input[name^="variable_regular_price"].wc_input_price' ); a.click( function( c ) { d = jQuery( this ).parent( 'label' ).next( 'input[name^="variable_regular_price"].wc_input_price' ).val(); e = confirm( "Change the price of all variations to " + d + "?" ); if ( e ) b.val( d ).trigger( 'change' ); c.preventDefault(); } ); b.prev( 'label' ).append( " " ).append( a ); aa = jQuery( '<a href="#">Apply to all Variations</a>' ); bb = jQuery( 'input[name^="variable_sale_price"].wc_input_price' ); aa.click( function( cc ) { dd = jQuery( this ).parent( 'label' ).next( 'input[name^="variable_sale_price"].wc_input_price' ).val(); ee = confirm( "Change the price of all variations to " + dd + "?" ); if ( ee ) bb.val( dd ).trigger( 'change' ); cc.preventDefault(); } ); bb.prev( 'label' ).append( " " ).append( aa ); } <?php if ( version_compare( $woocommerce->version, '2.4', '>=' ) ) : ?> jQuery( document ).ready( function() { jQuery( document ).ajaxComplete( function( event, request, settings ) { if ( settings.data.lastIndexOf( "action=woocommerce_load_variations", 0 ) === 0 ) { addVariationLinks(); } } ); } ); <?php else: ?> addVariationLinks(); <?php endif; ?> </script> <?php }
This can be added as a stand-alone plugin (recommended) or to the functions.php
of your active (child) theme.
(November 6, 2015) We’ve packaged this code up as a plugin on Github: View | Download
(March 13, 2018) Per a request, we’ve updated this code/plugin to duplicate this functionality for the sale price as well as the regular price.