mirror of
https://github.com/woocommerce/woocommerce-paypal-payments.git
synced 2025-09-06 18:16:38 +08:00
Merge pull request #670 from woocommerce/PCP-625-paypal-smart-buttons-not-display-when-parent-is-out-of-stock
If product has inStock variation then allow button rendering
This commit is contained in:
commit
22b7aed89a
1 changed files with 34 additions and 1 deletions
|
@ -12,6 +12,7 @@ namespace WooCommerce\PayPalCommerce\Button\Assets;
|
||||||
use Exception;
|
use Exception;
|
||||||
use Psr\Log\LoggerInterface;
|
use Psr\Log\LoggerInterface;
|
||||||
use WC_Product;
|
use WC_Product;
|
||||||
|
use WC_Product_Variation;
|
||||||
use WooCommerce\PayPalCommerce\ApiClient\Entity\PaymentToken;
|
use WooCommerce\PayPalCommerce\ApiClient\Entity\PaymentToken;
|
||||||
use WooCommerce\PayPalCommerce\ApiClient\Factory\PayerFactory;
|
use WooCommerce\PayPalCommerce\ApiClient\Factory\PayerFactory;
|
||||||
use WooCommerce\PayPalCommerce\ApiClient\Helper\DccApplies;
|
use WooCommerce\PayPalCommerce\ApiClient\Helper\DccApplies;
|
||||||
|
@ -1256,9 +1257,25 @@ class SmartButton implements SmartButtonInterface {
|
||||||
/**
|
/**
|
||||||
* The filter returning true if PayPal buttons/messages can be rendered for this product, or false otherwise.
|
* The filter returning true if PayPal buttons/messages can be rendered for this product, or false otherwise.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
$in_stock = $product->is_in_stock();
|
||||||
|
|
||||||
|
if ( $product->is_type( 'variable' ) ) {
|
||||||
|
/**
|
||||||
|
* The method is defined in WC_Product_Variable class.
|
||||||
|
*
|
||||||
|
* @psalm-suppress UndefinedMethod
|
||||||
|
*/
|
||||||
|
$variations = $product->get_available_variations( 'objects' );
|
||||||
|
$in_stock = $this->has_in_stock_variation( $variations );
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Allows to filter if PayPal buttons/messages can be rendered for the given product.
|
||||||
|
*/
|
||||||
return apply_filters(
|
return apply_filters(
|
||||||
'woocommerce_paypal_payments_product_supports_payment_request_button',
|
'woocommerce_paypal_payments_product_supports_payment_request_button',
|
||||||
! $product->is_type( array( 'external', 'grouped' ) ) && $product->is_in_stock(),
|
! $product->is_type( array( 'external', 'grouped' ) ) && $in_stock,
|
||||||
$product
|
$product
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -1295,4 +1312,20 @@ class SmartButton implements SmartButtonInterface {
|
||||||
}
|
}
|
||||||
return '';
|
return '';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks if variations contain any in stock variation.
|
||||||
|
*
|
||||||
|
* @param WC_Product_Variation[] $variations The list of variations.
|
||||||
|
* @return bool True if any in stock variation, false otherwise.
|
||||||
|
*/
|
||||||
|
protected function has_in_stock_variation( array $variations ): bool {
|
||||||
|
foreach ( $variations as $variation ) {
|
||||||
|
if ( $variation->is_in_stock() ) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue