From 59a68fb604ad22adb232e01a1d4a291b7cffeb69 Mon Sep 17 00:00:00 2001
From: Pedro Silva
Date: Mon, 24 Jul 2023 17:09:45 +0100
Subject: [PATCH] Add sanitize woocommerce_widget_cart_is_hidden filter for
consistent values. Remove context restrictions to mini-cart paypal buttons.
---
modules/ppcp-button/resources/js/button.js | 17 +++++++------
.../ppcp-button/src/Assets/SmartButton.php | 24 +++++++++++++++++++
2 files changed, 32 insertions(+), 9 deletions(-)
diff --git a/modules/ppcp-button/resources/js/button.js b/modules/ppcp-button/resources/js/button.js
index 790030920..97fa91656 100644
--- a/modules/ppcp-button/resources/js/button.js
+++ b/modules/ppcp-button/resources/js/button.js
@@ -137,16 +137,15 @@ const bootstrap = () => {
};
const renderer = new Renderer(creditCardRenderer, PayPalCommerceGateway, onSmartButtonClick, onSmartButtonsInit);
const messageRenderer = new MessageRenderer(PayPalCommerceGateway.messages);
- if (context === 'mini-cart' || context === 'product') {
- if (PayPalCommerceGateway.mini_cart_buttons_enabled === '1') {
- const miniCartBootstrap = new MiniCartBootstap(
- PayPalCommerceGateway,
- renderer,
- errorHandler,
- );
- miniCartBootstrap.init();
- }
+ if (PayPalCommerceGateway.mini_cart_buttons_enabled === '1') {
+ const miniCartBootstrap = new MiniCartBootstap(
+ PayPalCommerceGateway,
+ renderer,
+ errorHandler,
+ );
+
+ miniCartBootstrap.init();
}
if (context === 'product' && PayPalCommerceGateway.single_product_buttons_enabled === '1') {
diff --git a/modules/ppcp-button/src/Assets/SmartButton.php b/modules/ppcp-button/src/Assets/SmartButton.php
index fded20a67..3e7af313b 100644
--- a/modules/ppcp-button/src/Assets/SmartButton.php
+++ b/modules/ppcp-button/src/Assets/SmartButton.php
@@ -372,6 +372,8 @@ class SmartButton implements SmartButtonInterface {
);
}
+ $this->sanitize_woocommerce_filters();
+
return true;
}
@@ -1522,4 +1524,26 @@ class SmartButton implements SmartButtonInterface {
return absint( $wp->query_vars['order-pay'] );
}
+
+ /**
+ * Sanitize woocommerce filter on unexpected states.
+ *
+ * @return void
+ */
+ private function sanitize_woocommerce_filters(): void {
+
+ // Sometimes external plugins like "woocommerce-one-page-checkout" set the $value to null.
+ // Here we also disable the mini-cart on cart-block and checkout-block pages where our buttons aren't supported yet.
+ add_filter( 'woocommerce_widget_cart_is_hidden', function ($value) {
+ if (null === $value) {
+ if ( is_product() ) {
+ return false;
+ }
+ return in_array($this->context(), array('cart', 'checkout', 'cart-block', 'checkout-block'));
+ }
+ return in_array($this->context(), array('cart-block', 'checkout-block')) ? true : $value;
+ }, 11);
+
+ }
+
}