Php 将多个产品添加到购物车

Php 将多个产品添加到购物车,php,Php,我对逻辑有一些问题,如有任何帮助,将不胜感激: $total_add = $_POST['xTotalNumProduct']; if(ISSET($_SESSION['cart']['CartTotalNum']) && $_SESSION['cart']['CartTotalNum'] > 0) { $CartTotalNum = $_SESSION['cart']['CartTotalNum']; $cart = $_SESSION['cart'];

我对逻辑有一些问题,如有任何帮助,将不胜感激:

$total_add = $_POST['xTotalNumProduct'];

if(ISSET($_SESSION['cart']['CartTotalNum']) && $_SESSION['cart']['CartTotalNum'] > 0) {
    $CartTotalNum = $_SESSION['cart']['CartTotalNum'];
    $cart = $_SESSION['cart'];

    for ($i=1; $i<=$total_add; $i++) {

        for ($x=1; $x<=$CartTotalNum; $x++) {
            if ($cart['ItemId'.$x] == $_POST['xPdt'.$i.'Id']) { // this will only check the first key ie $cart['ItemId1]
                $cart['ItemQty'.$x] = $_POST['xPdt'.$i.'Qty'];
            }
            else {
                $CartTotalNum = $CartTotalNum + 1;
                $cart['ItemId'.$CartTotalNum] = $_POST['xPdt'.$i.'Id'];
                $cart['ItemQty'.$CartTotalNum] = $_POST['xPdt'.$i.'Qty'];
            }
        }
    }
    $cart['CartTotalNum'] = $CartTotalNum;

} else {
    $cart = array();
    for ($i=1; $i<=$total_add; $i++) {
        $cart['ItemId'.$i] = $_POST['xPdt'.$i.'Id'];
        $cart['ItemQty'.$i] = $_POST['xPdt'.$i.'Qty'];      
    }
    $cart['CartTotalNum'] = $total_add;
}
$total\u add=$\u POST['xTotalNumProduct'];
如果(ISSET($\ U会话['cart']['CartTotalNum'])和&$\ U会话['cart']['CartTotalNum']>0){
$CartTotalNum=$\会话['cart']['CartTotalNum'];
$cart=$\会话['cart'];

对于($i=1;$i而言,这是非常糟糕的代码:

            $cart['ItemQty'.$x] = $_POST['xPdt'.$i.'Qty'];
                          ^^^^^
为什么要构建动态键?您可以轻松使用多维数组:

   $_SESSION['cart'][$itemID]['quantity'] = $_POST[...];
通过itemID为购物车设置关键帧,可以将项目的所有购物车数据保存在一个位置,而不是分散在任何地方

请注意,表单字段名中也可以使用类似的结构,例如

<input type="text" name="foo[bar][baz][42]" ... >

提交表单时使用。

这个问题多年前就被问到了,但对于现在遇到它的任何人来说,这对我来说都是有效的

我将此HTML放在我的页面中:

<form method="post" action="/">

    <input type="hidden" name="E24MT1260" value="23">
    <input type="hidden" name="ACFIT60060015" value="14">

    <input type="hidden" name="programatic_add_to_cart" value="true">
    <input type="submit" value="Add to cart">

</form>

并将其添加到my functions.php中

<?php

    add_action('wp_loaded', function() {
        global $woocommerce;

        if (!empty($_POST) && !empty($_POST['programatic_add_to_cart'])){ 
            global $woocommerce;

            foreach ($_POST as $sku => $quantity) {

                $product_id = wc_get_product_id_by_sku($sku);
                $woocommerce->cart->add_to_cart($product_id, $quantity);
            }

            wp_redirect( '/cart' );
            exit;
        }

    });

?>


因为我正在接管已有的站点,之前已经建立了一些基础设施。我试图简单地做到这一点,但开始意识到需要进行更多的修改。您将您的else添加到for循环内部的购物车中。如果您不想在循环完成之前增加$CartTotalNum,它需要在它之外。谢谢r注释,但出于其他原因,我需要$\u会话中可用的$CartTotalNum
<?php

    add_action('wp_loaded', function() {
        global $woocommerce;

        if (!empty($_POST) && !empty($_POST['programatic_add_to_cart'])){ 
            global $woocommerce;

            foreach ($_POST as $sku => $quantity) {

                $product_id = wc_get_product_id_by_sku($sku);
                $woocommerce->cart->add_to_cart($product_id, $quantity);
            }

            wp_redirect( '/cart' );
            exit;
        }

    });

?>