在woocommerce中,我使用以下代码添加了自定义费用:
add_action( 'woocommerce_cart_calculate_fees', 'custom_fee_based_on_cart_total', 10, 1 );
function custom_fee_based_on_cart_total( $cart_object ) {
if ( is_admin() && ! defined( 'DOING_AJAX' ) ) return;
// The percetage
$percent = 10; // 15%
// The cart total
$cart_total = $cart_object->cart_contents_total;
// The conditional Calculation
$fee = $cart_total >= 25 ? $cart_total * $percent / 100 : 0;
if ( $fee != 0 )
$cart_object->add_fee( __( "Gratuity", "woocommerce" ), $fee, false );
}
我只想刷一下费用顺序,就像我希望在小计之后是“每人费用”,在“每人费用”之后是“小费”。
答案 0 :(得分:1)
默认情况下,WooCommerce类WC_Cart_Fees会按金额对费用进行排序。
,并且为了修改WooCommerce的默认行为,您需要覆盖 cart-totals.php
可以在woocommerce插件目录woocommerce / templates / cart / cart-totals.php下找到
在您的子主题名称woocommerce / cart下创建目录,然后将该文件复制到该目录
转到第61行,您可以找到以下代码:
<?php foreach ( WC()->cart->get_fees() as $fee ) : ?>
<tr class="fee">
<th><?php echo esc_html( $fee->name ); ?></th>
<td data-title="<?php echo esc_attr( $fee->name ); ?>"><?php wc_cart_totals_fee_html( $fee ); ?></td>
</tr>
<?php endforeach; ?>
将该代码更改为以下内容:
<?php
$array = json_decode(json_encode(WC()->cart->get_fees()), true);
ksort($array); //
foreach ($array as $fee): ?>
<tr class="fee">
<th><?php echo esc_html($fee['name']); ?></th>
<td data-title="<?php echo esc_attr($fee['name']); ?>"><?php echo
$fee['total']; ?></td>
</tr>
<?php endforeach;?>
代码说明:
基本上,我们在这里所做的就是从WC类中获取所有费用,并使用内置函数json_encode()的php将其转换为数组,以便无论如何我们都可以对数组进行排序,我使用了ksort()函数根据键以升序对数组进行排序, 然后打印出费用:
这是输出的屏幕截图:
答案 1 :(得分:0)
您可以按照kashalo的说明复制 cart-fee.php 模板。
但是,如果您唯一需要更改的是费用单,则可以使用checkout_sort_fees
过滤器覆盖排序功能。
第一个示例:颠倒顺序。
add_action( 'woocommerce_sort_fees_callback', 'reverse_sort_fees' );
function reverse_sort_fees( $order )
{
return -$order;
}
您可以使用更复杂的排序方式,例如按费用名称排序。
add_action( 'woocommerce_sort_fees_callback', 'alpha_sort_fees', 10, 3 );
function alpha_sort_fees( $order, $a, $b )
{
return $a->name > $b->name ? 1 : -1;
}