Woocommerce 批发用户角色将最小订单数量设置为 10 个产品 PHP

问题描述 投票:0回答:1

我一直在寻找与 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 并应用于我的代码片段插件,但没有工作。

javascript php woocommerce user-controls code-snippets
1个回答
0
投票

出现此问题的原因是,删除结帐按钮的脚本仅在页面加载或刷新时运行一次,并且在购物车更新时不会重新运行。为了确保按钮保持隐藏或禁用状态,直到购物车达到最低数量,您可以添加事件侦听器来检测购物车总数的变化。

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);
});
© www.soinside.com 2019 - 2024. All rights reserved.