Woocommerce-购物车页面-更改购物车中产品的顺序(旅行套餐)

Woocommerce-购物车页面-更改购物车中产品的顺序(旅行套餐),woocommerce,cart,Woocommerce,Cart,我正试图通过woocommerce销售自建的旅游套餐。因此,游客会选择一些他们喜欢的酒店、活动和交通工具,然后将它们添加到购物车中 我面临的问题是,物品(旅游产品)按添加顺序添加到购物车中 然而,我需要这样的功能:无论是管理员还是客人都可以重新安排这些物品在购物车中出现的位置(顺序)。也许像AJAX那样的拖放功能会很棒 有没有办法做到这一点 另外,我不是指改变产品目录中出现的顺序,这对插件来说很容易 请告诉我一些方向。谢谢。我曾经考虑过从我的插件重新订购购物车中的物品,但最终决定这对我来说不值得

我正试图通过woocommerce销售自建的旅游套餐。因此,游客会选择一些他们喜欢的酒店、活动和交通工具,然后将它们添加到购物车中

我面临的问题是,物品(旅游产品)按添加顺序添加到购物车中

然而,我需要这样的功能:无论是管理员还是客人都可以重新安排这些物品在购物车中出现的位置(顺序)。也许像AJAX那样的拖放功能会很棒

有没有办法做到这一点

另外,我不是指改变产品目录中出现的顺序,这对插件来说很容易


请告诉我一些方向。谢谢。

我曾经考虑过从我的插件重新订购购物车中的物品,但最终决定这对我来说不值得。以下是我将要使用的内容:

add_action( 'woocommerce_cart_loaded_from_session', 'so_26640996_reorder_cart_keys' );

/**
 * Re-order the cart keys to keep container/bundled items from being separated in case of force-sells
 * @param  object   $cart - the WC_Cart class
 * @return void
 */
function so_26640996_reorder_cart_keys( $cart ){

    if( $cart->cart_contents ) { 

        $new = array();

        $contents = $cart->cart_contents;

        // loop through the cart's contents
        foreach( $cart->cart_contents as $cart_key => $cart_item ){

            // add the item back into a new array of cart contents
            $new[$cart_key]=$cart_item;

            // if the cart item meets some condition re-arrange its position
            if( isset( $cart_item['mnm_contents'] ) && is_array( $cart_item['mnm_contents'] ) ){
                foreach($cart_item['mnm_contents'] as $key){
                    if( isset( $contents[$key] ) ){
                        $new[$key] = $contents[$key];
                        unset($contents[$key]);
                    }
                }
            }

        }

        $cart->cart_contents = $new;

    }

}

它并不完全适合你的问题(而且也很晚了),但它可能会帮助别人回答同样的问题。

您好,谢谢您的回复。您是否将此代码粘贴到购物车页面?不,理想情况下为其创建一个新插件。或者在最坏的情况下,在主题的
functions.php
中尝试它。请记住,这只是一个示例,可能不会完全满足您的要求。您好@helgatheviking您的解决方案解决了我的问题,但您的一些代码我不明白,如果您能给出解释,我将不胜感激。在第一个循环中,
$new
已为购物车项目分配,但在第二个循环中,
$new
如何使购物车项目按正确的顺序排列?为什么需要
unset
,无论是否应用
unset
,我的序列都是正确的。@YingRuiWong,因为我5年的代码很邋遢?我想你是对的。。。应该不需要
unset()
任何操作,
$contents
变量可能会被忽略。尽管注意到我在我的一个插件中引用了它,并且可能只对我的插件创建的产品类型应用排序。