我一直在寻找与 WooCommerce 相关的 PHP 解决方案,但我发现没有任何解决方案能够满足我的特定要求。这是我的情况背景:
我需要批发用户满足至少 10 件产品的数量才能从购物车进入结帐页面。我已经实现了一些 PHP 代码来隐藏“继续结帐”按钮以及任何 Stripe 付款按钮(例如 GPay 和 Apple Pay)(如果未满足 10 个最低数量)。
虽然当我从商店页面单击购物车按钮、从购物车页面加载或刷新时,代码最初可以工作,但如果我更新购物车数量(例如,将其从 9 更改为 8 或从 8 更改为 9),这些按钮会重新出现。看来我实现的功能只有在重新刷新购物车页面时才有效。除非购物车满足 10 件产品的最低数量,否则它们应保持隐藏或禁用状态。
我尝试了 StackOverflow 中的各种 PHP 片段,它们有类似的请求,但没有一个能解决问题。我使用代码片段插件来管理 PHP 代码,而不是子主题。
这是我一直在使用的代码:
// Set a minimum quantity for wholesale role
add_action( 'woocommerce_before_cart', 'thumbtoe_minimum_order_quantity' ); // Error message on cart page
add_action( 'woocommerce_check_cart_items', 'thumbtoe_minimum_order_quantity' );
add_action( 'woocommerce_proceed_to_checkout', 'thumbtoe_minimum_order_quantity' ); // Error message on cart page
function thumbtoe_minimum_order_quantity() {
// Set the minimum quantity
$minimum_quantity = 10;
// Get the current user
$user = wp_get_current_user();
// Check if the user has the wholesale role
if ( in_array( 'wholesale', (array) $user->roles ) ) {
// Get total quantity in cart
$total_quantity = WC()->cart->get_cart_contents_count();
// If total quantity is less than minimum
if ( $total_quantity < $minimum_quantity ) {
// Error message
$error_message = sprintf( 'Retail Partners Minimum order amount must exceed %s items in your cart to proceed.', $minimum_quantity );
// Display the error message on the cart page
wc_print_notice( $error_message, 'error' );
// Remove the Proceed to Checkout button
add_action( 'wp_footer', function() {
?>
<script type="text/javascript">
jQuery(function($) {
$('a.checkout-button').remove(); // Remove the Proceed to Checkout button
$('.gpay-card-info-container-fill').hide(); // Hide GPay button
$('.apple-pay-button').hide(); // Hide Apple Pay button
$('.wc-stripe-cart-checkout-container ul.wc_stripe_cart_payment_methods.active li.wc-stripe-payment-method, p').remove(); // Remove specified Stripe elements
});
</script>
<?php
});
return; // Stop further execution
}
}
}
我已经从 StackOverflow 搜索了所有相关的 PHP 并应用于我的代码片段插件,但没有工作。
出现此问题的原因是,删除结帐按钮的脚本仅在页面加载或刷新时运行一次,并且在购物车更新时不会重新运行。为了确保按钮保持隐藏或禁用状态,直到购物车达到最低数量,您可以添加事件侦听器来检测购物车总数的变化。
jQuery(function($) {
// Function to hide buttons
function hideButtons() {
if ( $('body').hasClass('woocommerce-cart') ) {
$('a.checkout-button').remove(); // Remove the Proceed to Checkout button
$('.gpay-card-info-container-fill').hide(); // Hide GPay button
$('.apple-pay-button').hide(); // Hide Apple Pay button
$('.wc-stripe-cart-checkout-container ul.wc_stripe_cart_payment_methods.active li.wc-stripe-payment-method, p').remove(); // Remove specified Stripe elements
}
}
// Run initially on page load
hideButtons();
// Re-run whenever the cart is updated
$(document.body).on('updated_cart_totals', hideButtons);
});