Site icon CodeGurus

WooCommerce Multilingual translated variations’ quantity out of sync fix

This PHP script may help if WooCommerce Multilingual product variation quantities are getting out of sync. Basically what it does is it deletes old “post_product_variation” relations from icl_translations table and creates new ones (and the ones which were already missing – that’s where the problem is) using pure PHP mysqli connection rather than any WordPress/WooCommerce functionalities so it doesn’t depend on those if they had any bugs causing the out of sync situation in first place.

  1. Try WooCommerce Multilingual built-in troubleshooting feature at WooCommerce > WooCommerce Multilingual > Status > Troubleshooting > check all the boxes except duplicate term (or check it if you need) and Start. Might happen it already solves the chaos or for some but not all products.
  2. Download the script to your WordPress site root directory where there is also wp-config.php (required). You’ll find the .zip at the end of this post. Make backups and read the script code first, use at your own risk! Yes, it deletes old relations from the DB, so have a backup. Run the script directly (it is not a plugin).
  3. Go back to point 1 and Sync variables products again. This step is necessary!
  4. (Bonus) Now the variation quantities should be already synced. However if the quantities are now same in different languages but you edit (or order) a variation quantity and it doesn’t update the other translations:
    1. WPML > Translation Management > Multilingual Content Setup. Custom Field Translation > Show system fields, _stock has to be listed and set to “copy”.
    2. If _stock is not listed nor set to “copy” examine WooCommerce > WooCommerce Multilingual > Status for _stock. And plugins/woocommerce-multilingual/wpml-config.xml file and optionally same file in your theme folder. Edit XML to “copy” and Restore default at WPML > Languages > Reset settings.
    3. Everything ok but still not synchronizing automatically? Add the following code to your themes functions.php, requires points 4.1 and 4.2 to be resolved (_stock listed and set to “copy”):

// WooCommerce Sync variation quantity in translations
add_action('updated_post_meta', 'wc_sync_variation_quantity_in_translations', 10, 4);
function wc_sync_variation_quantity_in_translations($meta_id, $post_id, $meta_key, $meta_value)
{
    if ('_stock' == $meta_key) {
		do_action('wpml_sync_custom_field', $post_id, $meta_key);
	}
}
// /

Tested/solution for:
* WooCommerce 2.6.14, the latest WooCommerce2 version.
* WooCommerce Mutlilingual 4.2.0
* WPML Translation Management 2.2.6

Even if the script was written for WooCommerce2 this kind of trouble exists on newer 3+ versions also. Still give it a try.

Exit mobile version