在 Woocommerce 购物车和结帐页面中以不同方式重新排序多项费用

dan*_*nyo 4 php wordpress checkout woocommerce fee

在 woocommerce 的结帐中添加多项费用时,是否可以优先考虑它们的顺序?目前看来 woocommerce 按费用值对它们进行排序,因此例如:费用 1 = \xc2\xa310.00,费用 2 = \xc2\xa320.00,它们将按如下方式排序:

\n\n
    \n
  • 小计
  • \n
  • 费用 2 = \xc2\xa320.00
  • \n
  • 费用 1 = \xc2\xa310.00
  • \n
  • 全部的
  • \n
\n\n

是否可以定制订单?也许可以为附加费用的操作添加优先级?我希望Fee 2永远是最后一个收费项目。

\n\n

这是可以实现的吗?

\n

Loi*_*tec 5

在 Woocommerce 中,费用由类处理WC_Cart_Fee,如果您查看get_fees()方法的源代码,您会看到排序是通过 php 排序功能按费用金额进行的sort_fees_callback()uasort()

对购物车和结帐页面中显示的费用进行不同排序的唯一方法是通过活动子主题(或活动主题)覆盖某些模板

1) 按名称对费用进行排序:首先,这是一个自定义函数,用于按标签名称对费用进行排序:

function wc_get_sorted_fees(){
    $fees = WC()->cart->get_fees();
    ksort($fees);
    return $fees;
}
Run Code Online (Sandbox Code Playgroud)

代码位于活动子主题(或活动主题)的 function.php 文件中。经过测试并有效。

2) 显示 - 覆盖模板 cart/cart-totals.phpcheckout/review-order.php.

在这两个模板文件中,您将替换以下行:

<?php foreach ( WC()->cart->get_fees() as $fee ) : ?>
Run Code Online (Sandbox Code Playgroud)

经过

<?php foreach ( wc_get_sorted_fees() as $fee ) : ?>
Run Code Online (Sandbox Code Playgroud)

相关:按 WooCommerce 订单和电子邮件通知上的名称对费用进行排序