Der Hotfix ist denke ich nicht die eleganteste L?sung, sprich man kann das sicherlich anders l?sen. Ich habe einfach nur ein kleines JavaScript geschrieben, welches das PayPal-Iframe versteckt, bis alle variationen ausgew?hlt sind.
Am liebsten würde ich den Button deaktivieren, da es aber ein IFrame ist, war es das leichteste dieses einfach zu verstecken.
Wer Lust hat, kann sich das snippet hier einfach nehmen, die Funktion addPPPExpressValidation()
muss noch nachdem sie Seite geladen hat, gecalled werden.
Das Script sollte man ggf nur auf Produktseiten einbinden, ist aber auch dazu f?hig in eine globale JS eingebunden zu werden. Die Funktionen verhindern weiteres ausführen, wenn es sich um eine nicht Produkt-Seite bzw um eine einzel Produkt-Seite handelt.
/**
* Adds the PayPal-Express button Validation
*/
function addPPPExpressValidation() {
let variationForm = document.getElementsByClassName('variations_form cart');
// Exit on any other product/page which dont have this element
if(! variationForm.length)
return;
// Make sure to get only the variation selects
let variationTable = document.getElementsByClassName('variations');
// Add Event-Listener to all variation selects
let variationSelects = variationTable[0].getElementsByTagName('select');
for(let i = 0; i < variationSelects.length; i++) {
variationSelects[i][window.addEventListener ? 'addEventListener' : 'attachEvent'](window.addEventListener ? 'change' : 'onchange', function (variations) {
return function (ev) {
disablePPPExpressButtonOnEmptyVariation(variations);
};
}(variationSelects), false);
}
// Also run once to ensure the pp button is vanish before (if no user interaction)
disablePPPExpressButtonOnEmptyVariation(variationSelects);
}
/**
* Disables (aka hide) the PayPal-Plus-Button, when a variation is not filed out
*
* @param {HTMLCollection} variations - Variation-selects Element-list
*/
function disablePPPExpressButtonOnEmptyVariation(variations) {
if(! variations || ! variations.length)
return;
// Get all variation selects and check if they are filled
let variationsFilled = true;
for(let i = 0; i < variations.length; i++) {
if(! variations[i].value) {
variationsFilled = false;
break;
}
}
// Get the Paypal-"Button"-Container
let paypalExpressContainer = document.getElementsByClassName('woo-paypalplus-checkout-button');
if(paypalExpressContainer.length) {
paypalExpressContainer = paypalExpressContainer[0];
// Disable/show the button
if(variationsFilled)
paypalExpressContainer.style.display = '';
else
paypalExpressContainer.style.display = 'none';
}
}
Sofern da irgendwo nen wurm drinnen ist einfach schreiben, ich fixe und update dann den Code hier (soweit lief aber alles 1A)
-
This reply was modified 5 years, 1 month ago by petschko.
-
This reply was modified 5 years, 1 month ago by petschko.