php 如果购物车不是空的,WooCommerce add_to_cart()失败

odopli94  于 2023-06-28  发布在  PHP
关注(0)|答案(1)|浏览(136)

我有一个相当简单的函数,它获取几个产品数据,并通过foreach循环将这些产品批量添加到购物车中。问题在于,如果购物车中已经包含了添加的任何产品,则循环中的第一个产品将被跳过而不会添加。任何其他产品后,第一个,得到添加没有问题。如果购物车是空的,所有产品都可以添加,包括第一个。

**我已经使用干净的安装重新创建了问题。**我只激活了WooCommerce和代码段。您可以在此/sample-page/中看到单击“Add All to Cart”按钮的行为。第一次会起作用,但如果重新加载并再次单击,问题就会出现。

add_shortcode( 'add-all-to-cart', 'add_all_to_cart_shortcode' );

function add_all_to_cart_shortcode() {
    global $woocommerce;
    ob_start();
    ?>
        <form id="add-all-to-cart" method="post">
        <button type="submit" name="add-all-to-cart-button" class="add-all button alt">Add all to cart</button>
        </form>
    <?php
    return ob_get_clean();
}

add_action( 'init', 'add_all_to_cart_handler' );
function add_all_to_cart_handler() {
    global $woocommerce;
    if ( isset( $_POST['add-all-to-cart-button'] ) ) {
        $products_data = array(
            array(
                'product_id' => 18,
                'variation_id' => 19,
                'quantity' => 1
            ),
            array(
                'product_id' => 21,
                'variation_id' => 22,
                'quantity' => 1
            ),
            array(
                'product_id' => 24,
                'variation_id' => 26,
                'quantity' => 1
            )
        );

        foreach ( $products_data as $product ) {
            $product_id = $product['product_id'];
            $variation_id = $product['variation_id'];
            $quantity = $product['quantity'];
            WC()->cart->add_to_cart( $product_id, $quantity, $variation_id );
        }
        wp_safe_redirect( wc_get_cart_url() );
        exit();
    }
}

我尝试过的:

我已经转储了所有变量,所有数据都是好的,都是整数。我试着检查cart_item_key,它被正确分配。我试着改变代码,首先寻找任何给定的产品已经在购物车,只是更新他们的数量,但这并没有解决问题。我也试过在里面放一些WC()->cart->maybe_set_cart_cookies();语句,但没有成功。
在寻找答案时,我发现一些人在谈论购物车会话和持久购物车。但我不确定这是否有关系。
先谢谢你了!

dgiusagp

dgiusagp1#

初始化钩子被调用的方式更早,错过了实际的工作在您的代码。
调用add_all_to_cart_handler函数时,将init钩子替换为template_redirect钩子。

相关问题