woocommerce_cart_calculate_fees加载后woocommerce_before_cart_table

问题描述:

我有一个问题试图做一些计算与woocommerce_before_cart_table自定义值,并将其传递给woocommerce_cart_calculate_fees。问题是,woocommerce_before_cart_table加载第一,我不能够通过该值从woocommerce_before_cart_tablewoocommerce_cart_calculate_fees钩......woocommerce_cart_calculate_fees加载后woocommerce_before_cart_table

add_action('woocommerce_before_cart_table', 'my_custom_cart_items_raw_output'); 
function my_custom_cart_items_raw_output() { 
    //$sum = array(); 
    foreach(WC()->cart->get_cart() as $cart_item_key => $item_values){ 

     global $wpdb; 

     $mylink = $wpdb->get_row("SELECT * FROM tax_hotel_and_name WHERE hotel_id= '".$item_values['st_booking_data']['room_id']."'"); 
     $x = $mylink->tax_percentage; 
     // Outputting the raw Cart items data to retrieve Bookings related data 
     $y = $item_values['st_booking_data']['total_price']; 

     $sum[]= ($x/100) * $y; 
      ($x/100) * $y.'<br>'; 
    // echo '<pre>'; print_r($item_values); echo '</pre>'; 
    } 
    array_sum($sum); 
} 

add_action('woocommerce_cart_calculate_fees','woocommerce_custom_surcharge'); 
function woocommerce_custom_surcharge() { 
    global $woocommerce; 

    if (is_admin() && ! defined('DOING_AJAX')) 
    return; 

    // $percentage = 0; 
    // $taxes = array_sum($woocommerce->cart->taxes); 
    // $surcharge = ($woocommerce->cart->cart_contents_total + $woocommerce->cart->shipping_total + $taxes) * $percentage; 
    // // Make sure that you return false here. We can't double tax people! 
    $woocommerce->cart->add_fee('Processing Fee', 12, false, ''); 
} 

我怎么能传递woocommerce_cart_calculate_fees挂钩,计算?

感谢

所以,如果我理解你正在你的第一个功能相关的预订数据计算的一些测试中woocommerce_before_cart_table大呼过瘾。我有侍女在你的代码为global $wpdb;变化不大:

add_action('woocommerce_before_cart_table', 'my_custom_cart_items_raw_output'); 
function my_custom_cart_items_raw_output() { 

    global $wpdb; // To be declared only once at the begining before the foreach loop 

    foreach(WC()->cart->get_cart() as $cart_item_key => $item_values){ 

     $mylink = $wpdb->get_row("SELECT * FROM tax_hotel_and_name WHERE hotel_id= '".$item_values['st_booking_data']['room_id']."'"); 
     $x = $mylink->tax_percentage; 
     // Outputting the raw Cart items data to retrieve Bookings related data 
     $y = $item_values['st_booking_data']['total_price']; 

     $sum[] = ($x/100) * $y; 
     // echo ($x/100) * $y.'<br>'; 
     // echo '<pre>'; print_r($item_values); echo '</pre>'; 
    } 
    array_sum($sum); 
    // test output of $sum 
    echo $sum; 
} 

一旦你确定你的计算,因为车的数据是怎么样的生活,你可以在你的第二挂钩函数中直接使用你的计算代码woocommerce_cart_calculate_fees动作钩子,有一些小的变化,因为这个钩子有一个本地$cart_object参数。

所以,你的代码应该是这样的:

add_action('woocommerce_cart_calculate_fees','woocommerce_custom_surcharge', 10, 1); 
function woocommerce_custom_surcharge($cart_object) { 

    if (is_admin() && ! defined('DOING_AJAX')) 
     return; 

    ## ---- CALCULATION ---- ## 

    global $wpdb; 

    foreach($cart_object->get_cart() as $values){ 

     $tax_hotel = $wpdb->get_row("SELECT * FROM tax_hotel_and_name WHERE hotel_id= '".$values['st_booking_data']['room_id']."'"); 

     $sum[] = ($tax_hotel->tax_percentage/100) * $values['st_booking_data']['total_price']; 
    } 

    $fee = array_sum($sum); 

    ## ---- APPLYING CALCULATED FEE ---- ## 

    if($fee > 0) 
     $cart_object->add_fee(__('Processing Fee'), $fee, false); 
} 

代码放在您的活动子主题(或主题)的function.php文件或也以任何插件文件。

此代码是未经测试,但它应该工作...

+1

一如既往woocommerce大师感谢您的帮助,并是可用的工作完美 – Shaik