我试图添加两个费用,所有WooCommerce订单时,如果购物车有"拍卖"产品在它.

我需要为购物车中的每个拍卖产品增加20的俱乐部费用,并 for each 拍卖产品额外的15%的佣金.

我的问题是:我不知道如何计算这些费用,因为佣金是根据每种产品的中标价格计算的.一张可以是100美元,另一张是50美元--以此类推.

这就是我试过的,当在一个本地主机上测试two个拍卖产品时,似乎不起作用,每个拍卖产品价值$100美元.总费用应该是$15 + $15 + $20 + $20 = $70美元,但我在 checkout 页面上什么也没有得到.完全不收费.

This is the code:

add_action( 'woocommerce_cart_calculate_fees', 'commission_and_fees', 10, 1 );
function commission_and_fees( $cart ) {

if ( is_admin() && ! defined( 'DOING_AJAX' ) ) return;
if ( ! ( is_checkout() && ! is_wc_endpoint_url() ) ) return;
if ( ! is_user_logged_in() ) return;

    // define arguments
    $clubbing_fee = '';
    $percentage_fee_per_item = '';
    
    // false, init
    $is_auction = false;

    // loop through and break if any auction products are found
    foreach ( $cart_object->cart_contents as $item ) {
        
        // when found, break
        if ( $item['data']->is_type( 'auction' ) ) {
            $is_auction = true;
            break;
        }
    }
 
    if ( $is_auction ) {
        
        $percentage_fee_per_item = 15;
        $clubbing_fee = 20;
        $percentage_and_clubbing_fee = $cart_object->cart_contents_total * $percentage_fee_per_item / 100 + $clubbing_fee;
        
        $cart_object->add_fee( "Auction Fees ($percentage_fee_per_item% + Clubbing Fee)", $percentage_and_clubbing_fee, true );
    }
}

推荐答案

您的代码…中有许多错误例如,$cart_object没有定义.

以下将是

  • 对拍卖物品加收15%的费用
  • 每件拍卖品加收20美元费用

代码:

add_action( 'woocommerce_cart_calculate_fees', 'auctions_commission_and_fees' );
function auctions_commission_and_fees( $cart ) {
    if ( is_admin() && ! defined( 'DOING_AJAX' ) ) 
        return;

    if ( ! ( is_checkout() && ! is_wc_endpoint_url() ) || ! is_user_logged_in() ) 
        return;

    $clubbing_fee    = 20; // Fixed (per auction item)
    $commission_rate = 0.15; // Percentage rate: 15%
    $items_qty_count = 0; // Initializing
    $items_subtotal  = 0; // Initializing

    // Loop through cart items
    foreach ( $cart->get_cart() as $item ) {
        if ( $item['data']->is_type('auction') ) {
            $items_qty_count += $item['quantity']; // Quantity count
            $items_subtotal  += $item['line_subtotal']; // Subtotal
        }
    }
 
    if ( $items_qty_count > 0 ) {
        // Commission fee (15% on auctions subtotal)
        $cart->add_fee( 
            __('Commission Fee (15%)', 'woocommerce'), 
            $items_subtotal * $commission_rate, 
            true 
        );

        // Clubbing fee ($20 per auction item)
        $cart->add_fee( 
            __('Clubbing Fee ($20 per item)', 'woocommerce'), 
            $clubbing_fee * $items_qty_count, 
            true 
        );
    }
}

代码位于您的子主题的unctions.php文件中(或在插件中).应该能行得通.

Php相关问答推荐

未在moodle上运行的计划任务

PHP中的圆生成器在国际日期变更线上失败

PHP根据特定索引值从中删除子数组

Laravel路由到控制器传输变量解决方案需要

即使在WooCommerce购物车中添加了两次产品,也要将所有项目设置为空白行

向WooCommerce管理订单总额添加自定义总额行

如何从phpseclib和SFTP获取日志(log)记录?

PHP 8.2 弃用日志(log)存储在 Laravel 10.22.0 中的哪里?

如何在 PHP 中以 hh:mm:ss 格式获取两个 strtotime datetime/s 之间的时间差

laravel Eloquent 模型的问题

使用自定义插件中的 WooCommerce 模板发送自定义邮箱

根据支付网关选项更改 WooCommerce Checkout 上的立即付款按钮文本

调度程序不发送任何消息

为什么 debug_backtrace() 不返回任何内容?

php var_dump(1) 返回字符串(4)

我怎样才能在 .htaccess 中有 2 个参数?

Symfony 自定义注销

如何在 php/laravel 中获取元素在数组中的位置

如何将文件直接上传到 Cloudinary 而不先保存在 public 文件夹中

无法按今天加上 7 天显示数据库项目