将产品添加到 WooCommerce 单品购物车后触发 JQuery 次点击

Trigger a JQuery click once product is added to cart on WooCommerce single products

我试图在 woocommerce 上使用 mini-cart.php 制作侧边栏,到目前为止我还不错,但我想在点击页面产品上的“添加到购物车”按钮后触发侧边栏。

我找到了 答案并对代码做了一些修改:

add_action( 'wp_footer', 'trigger_for_ajax_add_to_cart' );
 function trigger_for_ajax_add_to_cart() {
 ?>
    <script type="text/javascript">
        (function($){
            $('body').on( 'click', '.single_add_to_cart_button', function(){
                $( ".open-side-cart" ).trigger( "click" );
            });
        })(jQuery);
    </script>
 <?php
}

我想要的是在用户单击“.single_add_to_cart_button”class 按钮时触发 mini-cart.php 侧边栏,它起作用了。但由于 woocommerce 重新加载页面更新 mini-cart.php,因此触发器在 之前 重新加载页面。

有没有办法在重新加载页面后触发?

因为您没有使用 Ajax 添加到购物车,当产品添加到购物车时,页面会随着产品数据的发布而重新加载……然后您可以检查 $_POST['add-to-cart'] 以显示活动部分您的 jQuery 脚本,一旦页面重新加载如下:

add_action( 'wp_footer', 'trigger_for_ajax_add_to_cart' );
function trigger_for_ajax_add_to_cart() {
    if ( isset($_POST['add-to-cart']) && $_POST['add-to-cart'] > 0
    && isset($_POST['quantity']) && $_POST['quantity'] > 0 ) :
    ?>
    <script type="text/javascript">
        (function($){
            $( ".open-side-cart" ).trigger( "click" );

            // Display an alert for testing purpose (To be removed)
            alert('".open-side-cart" Click!');
        })(jQuery);
    </script>
    <?php
    endif;
}

代码进入活动子主题(或活动主题)的 functions.php 文件。已测试并有效。


在某些情况下您可能需要添加延迟,因此在这种情况下您可以替换为:

        $( ".open-side-cart" ).trigger( "click" );

通过以下代码块:

        setTimeout(function(){
            $( ".open-side-cart" ).trigger( "click" );
        }, 500);

谢谢@LoicTheAztec 我找到了解决方案。

在我的例子中,我无法使用 $ _POST ['add-to-cart'] 触发 jQuery。

我的解决方案是使用另一种方法,每次将产品添加到购物车时都会出现一条消息并显示“(产品名称)已添加到购物车”文本出现在 div 内class .woocommerce-message.

使用此方法我创建了一个触发器,每次出现此消息时都会单击 class .open-side-cart 并且会出现侧推车

代码:

add_action( 'wp_footer', 'trigger_for_ajax_add_to_cart' );

function trigger_for_ajax_add_to_cart() {
    //Only trigger if is single product page
    if ( is_product() )  {
    ?>
            <script type="text/javascript">
                (function($){
                        //If .woocommerce-message is visible
                        $(".woocommerce-message").each(function() {
                                if ($(this).css("visibility") == "visible") {

                                    //Trigger side cart .open-side-cart
                                    setTimeout(function(){
                                        $( ".open-side-cart" ).click();
                                    }, 500);

                                    //Nothing Happen
                                } else {
                                        return false;
                                }
                        });
                })(jQuery);
            </script>
    <?php
    }
}