// WPML ARABIC VARIATION IMAGES FIX
jQuery(function($) {
// Only run on Arabic product pages
if (!document.body.classList.contains('arabic') &&
window.location.href.indexOf('/ar/product/') === -1) {
return;
}
console.log('🚀 WPML Arabic Variation Images Fix Loading...');
// Function to fix Arabic variations
function fixArabicVariationImages() {
var $form = $('.variations_form');
if (!$form.length) return;
var arabicVariations = $form.data('product_variations');
if (!arabicVariations || !arabicVariations.length) return;
console.log('🔍 Checking ' + arabicVariations.length + ' Arabic variations...');
// Check if any variation needs fixing
var needsFix = false;
for (var i = 0; i < arabicVariations.length; i++) {
var variation = arabicVariations[i];
if (!variation.additional_variation_images ||
!Array.isArray(variation.additional_variation_images) ||
variation.additional_variation_images.length === 0) {
console.log('⚠️ Variation ' + variation.variation_id + ' needs fix');
needsFix = true;
break;
}
}
if (!needsFix) {
console.log('✅ All variations already have images');
return;
}
console.log('🌐 Fetching English variation data...');
// Get current Arabic URL
var currentUrl = window.location.href;
var englishUrl = currentUrl.replace('/ar/product/', '/product/');
// Fetch English page data using vanilla JS to avoid jQuery issues
var xhr = new XMLHttpRequest();
xhr.open('GET', englishUrl, true);
xhr.onreadystatechange = function() {
if (xhr.readyState === 4 && xhr.status === 200) {
// Parse HTML
var parser = new DOMParser();
var doc = parser.parseFromString(xhr.responseText, 'text/html');
// Find English variation data
var englishForm = doc.querySelector('.variations_form');
if (!englishForm) {
console.error('❌ English variation form not found');
return;
}
var variationDataAttr = englishForm.getAttribute('data-product_variations');
if (!variationDataAttr) {
console.error('❌ English variation data not found');
return;
}
try {
var englishVariations = JSON.parse(variationDataAttr);
console.log('✅ Loaded ' + englishVariations.length + ' English variations');
// Attribute mapping
var attributeMap = {
'amber-yellow': 'amber-yellow',
'nebula-red-ar': 'nebula-red',
'white-ar': 'white'
};
// Copy images from English to Arabic
var fixedCount = 0;
for (var i = 0; i < arabicVariations.length; i++) {
var arabicVar = arabicVariations[i];
var arabicColor = arabicVar.attributes && arabicVar.attributes.attribute_pa_color;
// Find matching English variation
var englishVar = null;
for (var j = 0; j < englishVariations.length; j++) {
var engVar = englishVariations[j];
var englishColor = engVar.attributes && engVar.attributes.attribute_pa_color;
if (attributeMap[arabicColor] === englishColor) {
englishVar = engVar;
break;
}
}
if (englishVar &&
englishVar.additional_variation_images &&
englishVar.additional_variation_images.length > 0) {
// Deep clone the images array
arabicVar.additional_variation_images = JSON.parse(
JSON.stringify(englishVar.additional_variation_images)
);
fixedCount++;
console.log('✅ Copied ' + arabicVar.additional_variation_images.length +
' images to variation ' + arabicVar.variation_id);
}
}
// Update the form data
$form.data('product_variations', arabicVariations);
// Force WooCommerce to reload
setTimeout(function() {
$form.trigger('check_variations');
console.log('🎉 Fixed ' + fixedCount + ' variations');
// Trigger gallery update for current variation
var currentVarId = $('input[name="variation_id"]').val();
if (currentVarId) {
var currentVar = null;
for (var i = 0; i < arabicVariations.length; i++) {
if (arabicVariations[i].variation_id == currentVarId) {
currentVar = arabicVariations[i];
break;
}
}
if (currentVar) {
$(document).trigger('found_variation', [currentVar]);
}
}
}, 300);
} catch (e) {
console.error('❌ Error parsing English data:', e);
}
}
};
xhr.send();
}
// Run fix after page loads - wait for WooCommerce to load variation data
setTimeout(function() {
// Check if WooCommerce variation script is loaded
if (typeof $.fn.wc_variation_form === 'function') {
fixArabicVariationImages();
} else {
// Wait a bit more if not loaded
setTimeout(fixArabicVariationImages, 1000);
}
}, 2000);
// Also run when variation changes
$(document).on('found_variation', function() {
setTimeout(fixArabicVariationImages, 500);
});
});