Php 在商业中更改购物车的订单

Php 在商业中更改购物车的订单,php,wordpress,woocommerce,cart,orders,Php,Wordpress,Woocommerce,Cart,Orders,我希望在WoodPress上的WooCommerce的购物车页面上重新排序产品表。目前,列出的产品从最旧到最新(从添加到购物车的顺序),并希望有相反的,期待有最新的添加在顶部和底部最旧的 do_action( 'woocommerce_before_cart' ); ?> <div class="cart_container"> <form class="cart-form" action="<?php echo esc_url( WC()->cart-&

我希望在WoodPress上的WooCommerce的购物车页面上重新排序产品表。目前,列出的产品从最旧到最新(从添加到购物车的顺序),并希望有相反的,期待有最新的添加在顶部和底部最旧的

do_action( 'woocommerce_before_cart' ); ?>

<div class="cart_container">

<form class="cart-form" action="<?php echo esc_url( WC()->cart->get_cart_url() ); ?>" method="post">

<?php do_action( 'woocommerce_before_cart_table' ); ?>
do_action('woocommerce_-before_-cart');?>

您可以修改woocommerce插件的cart/cart.php模板文件。当循环在购物车页面上以“WC()->cart->get_cart()”开始时,您可以首先将此数组放入一个单独的数组中,反转,然后使用此反转数组按相反顺序显示购物车产品


建议使用此选项是因为您实际上并没有与woocommerce对象交互,因此它涉及的处理较少。您只是将它们颠倒显示。

您可以修改woocommerce插件的cart/cart.php模板文件。当循环在购物车页面上以“WC()->cart->get_cart()”开始时,您可以首先将此数组放入一个单独的数组中,反转,然后使用此反转数组按相反顺序显示购物车产品

建议使用此选项是因为您实际上并没有与woocommerce对象交互,因此它涉及的处理较少。你只是把它们颠倒过来

要进行任何类型的购物车订购,您必须使用 钩子;以及扭转局面 只需使用PHP函数即可订购

代码如下:

add_action('woocommerce_cart_loaded_from_session', 'wh_cartOrderItemsbyNewest');

function wh_cartOrderItemsbyNewest() {

    //if the cart is empty do nothing
    if (WC()->cart->get_cart_contents_count() == 0) {
        return;
    }

    //array to collect cart items
    $cart_sort = [];

    //add cart item inside the array
    foreach (WC()->cart->get_cart() as $cart_item_key => $cart_item) {
        $cart_sort[$cart_item_key] = WC()->cart->cart_contents[$cart_item_key];
    }

    //replace the cart contents with in the reverse order
    WC()->cart->cart_contents = array_reverse($cart_sort);
}
代码进入活动子主题(或主题)的function.php文件。也可以在任何插件php文件中使用。
代码经过测试并正常工作。

希望这有帮助

要进行任何类型的购物车订购,您必须使用 钩子;以及扭转局面 只需使用PHP函数即可订购

代码如下:

add_action('woocommerce_cart_loaded_from_session', 'wh_cartOrderItemsbyNewest');

function wh_cartOrderItemsbyNewest() {

    //if the cart is empty do nothing
    if (WC()->cart->get_cart_contents_count() == 0) {
        return;
    }

    //array to collect cart items
    $cart_sort = [];

    //add cart item inside the array
    foreach (WC()->cart->get_cart() as $cart_item_key => $cart_item) {
        $cart_sort[$cart_item_key] = WC()->cart->cart_contents[$cart_item_key];
    }

    //replace the cart contents with in the reverse order
    WC()->cart->cart_contents = array_reverse($cart_sort);
}
代码进入活动子主题(或主题)的function.php文件。也可以在任何插件php文件中使用。
代码经过测试并正常工作。


希望这有帮助

接受的答案有一个主要缺陷:它创建了一个竞争条件和一个无限的AJAX刷新循环,并打开了多个选项卡()

我能够绕过这个问题的方法是使用动作挂钩:

  • 在购物车内容循环通过之前,我们反转内容并保存新的反向顺序
  • 购物车内容循环通过后,我们重复步骤1以恢复原始订单
  • 有三个区域(默认情况下)在前端循环购物车项目,因此我使用的动作挂钩覆盖了每个区域

    下面是经过测试的代码:

    function reverse\u cart\u contents(){
    $cart_contents=WC()->cart->get_cart_contents();
    如果($cart\u内容){
    $reversed\u contents=数组\u reverse($cart\u contents);
    WC()->购物车->设置购物车内容($reversed\u contents);
    }
    }
    添加操作(“在小型购物车之前添加商业购物车”,“反向购物车内容”);
    添加操作(“在小购物车之后添加商业购物车”,“反转购物车内容”);
    添加操作(“在购物车之前添加购物车”,“反向购物车内容”);
    添加操作(“在购物车后面加上购物车”,“反转购物车内容”);
    添加操作(“在购物车内容之前查看订单”,“反向购物车内容”);
    添加操作(“在购物车内容之后查看订单”,“反向购物车内容”);
    
    公认的答案有一个主要缺陷:它创建了一个竞争条件和一个无限的AJAX刷新循环,并打开了多个选项卡()

    我能够绕过这个问题的方法是使用动作挂钩:

  • 在购物车内容循环通过之前,我们反转内容并保存新的反向顺序
  • 购物车内容循环通过后,我们重复步骤1以恢复原始订单
  • 有三个区域(默认情况下)在前端循环购物车项目,因此我使用的动作挂钩覆盖了每个区域

    下面是经过测试的代码:

    function reverse\u cart\u contents(){
    $cart_contents=WC()->cart->get_cart_contents();
    如果($cart\u内容){
    $reversed\u contents=数组\u reverse($cart\u contents);
    WC()->购物车->设置购物车内容($reversed\u contents);
    }
    }
    添加操作(“在小型购物车之前添加商业购物车”,“反向购物车内容”);
    添加操作(“在小购物车之后添加商业购物车”,“反转购物车内容”);
    添加操作(“在购物车之前添加购物车”,“反向购物车内容”);
    添加操作(“在购物车后面加上购物车”,“反转购物车内容”);
    添加操作(“在购物车内容之前查看订单”,“反向购物车内容”);
    添加操作(“在购物车内容之后查看订单”,“反向购物车内容”);
    
    太好了,正是我想要的,谢谢!知道如何为我的迷你购物车返回相同的订单吗?@Kelly:我对迷你购物车不太熟悉,但我会尽快找到解决方案。@Kelly将mini-cart.php模板复制到主题中,并在每个循环中使用array\u reverse:
    foreach(array\u reverse(WC()->cart->get\u cart())作为$cart\u item\u key=>$cart\u item){
    …太好了,正是我想要的,谢谢!知道如何为我的迷你车返回相同的订单吗?@Kelly:我对迷你车不太熟悉,但我会尽快找到解决方案。@Kelly将mini-cart.php模板复制到主题中,并在每个循环中使用array\u reverse:
    foreach(array\u reverse(WC()->cart->get\u cart())作为$cart\u item\u key=>$cart\u item){
    。。。