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); + + } + }