首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >woocommerce_cart_calculate_fees负载后的woocommerce_before_cart_table

woocommerce_cart_calculate_fees负载后的woocommerce_before_cart_table
EN

Stack Overflow用户
提问于 2017-06-09 20:09:51
回答 1查看 8.3K关注 0票数 1

我在尝试使用woocommerce_before_cart_table自定义值进行计算并将它们传递给woocommerce_cart_calculate_fees时遇到了问题。问题是,woocommerce_before_cart_table是先加载的,我无法将该值从woocommerce_before_cart_table传递给woocommerce_cart_calculate_fees钩子…。

代码语言:javascript
复制
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钩子上传递这个计算?

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-06-09 22:05:52

因此,如果我理解,您正在对第一个挂在woocommerce_before_cart_table.中的函数中与预订数据有关的计算进行测试。我对您的global $wpdb;代码做了一些修改

代码语言:javascript
复制
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;
}

一旦您确定了计算,因为购物车数据是实时的,您可以在$cart_object动作钩子中的第二个钩子函数中直接使用计算代码,只需做一些小小的更改,因为这个钩子有一个本机$cart_object参数。

所以您的代码应该如下所示:

代码语言:javascript
复制
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 );
}

代码在您的活动子主题(或主题)的functions.php文件中,或者在任何插件文件中。

这段代码没有经过测试,但它应该可以运行…。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44465971

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档