基于产品输入的附加费用woocommerce

时间:2016-10-05 08:32:52

标签: php wordpress woocommerce

我已使用此代码为woocommerce产品添加额外费用https://sarkware.com/woocommerce-change-product-price-dynamically-while-adding-to-cart-without-using-plugins/

我的功能

g++-6 -I/usr/local/include program.cpp -o program -L /usr/local/lib -ltbb

第一个问题是所有额外费用加上两次(使用添加到购物车按钮时)。我刚刚通过将额外费用除以2来攻击这个。

之后的问题是,点击订单中的付款后,最终价格会发生变化 - 这是再次添加的额外费用的四分之一。

示例。原价500,用户选择增加1个额外人员的额外费用40。

添加到购物车时的计算是40 * 1/2 (由于某种原因,这是两次完成)

添加到购物车后是540,这是好的。

但是付款后(付款方式是银行/电汇)确认显示560作为明显是大问题的订单价格。

我将不胜感激任何帮助。

通过钩子添加其他人员的字段(基本上与教程中一样)。

function calculate_aditional_fees( $cart_object ) {
  if( !WC()->session->__isset( "reload_checkout" ) ) {

    $additional_price = get_option( 'additional_person_price' );
    $additional_driver_price = get_option( 'additional_driver_price' );

    foreach ( $cart_object->cart_contents as $key => $value ) {
      if ( $additional_driver_price > 0 || $additional_price > 0 ) {
        $additional_price *= $value['additional-persons'];
        $additional_driver_price *= $value['additional-drivers'];
        $cart_object->cart_contents[$key]['data']->price = floatval( $value['data']->price ) + $additional_driver_price + $additional_price;
      }
    }
  }
}

在加载搜索后我将钩子更改为 woocommerce_cart_calculate_fees 删除了师。这里的问题是计算没问题,付款后但是在购物车表中小计和总计是错误的(没有添加值)。

我试图手动计算,所以函数看起来

add_action( 'woocommerce_before_add_to_cart_button', 'add_form_before_booking_product' );

function add_form_before_booking_product() {
  global $post;
  if( function_exists('get_product') ){
    $product = get_product( $post->ID );
    if( $product->is_type( 'booking' ) ){
      echo '<table class="variations booking__variations"><tbody>
          <tr>
            <td class="label"><label for="additional-persons">'. __( 'Additional persons' )  .'</label></td>
            <td class="value">
              <input type="number" name="additional-persons" value="0" min="0" max=10 required />
            </td>
          </tr>
      </tbody>
    </table>';
    }
  }

}

删除评论时,总和和小计都可以,但是在付款后再次添加额外费用,所以我回到了同样的问题。

这可行,但......

它在购物车页面的小计下添加了另一行,计算还可以,还不是我正在寻找的解决方案(客户看不到每个产品的费用,但总计为一个)

function calculate_aditional_fees( $cart_object ) {
   if( !WC()->session->__isset( "reload_checkout" )) {
      $additional_price = get_option( 'additional_person_price' );
      $additional_driver_price = get_option( 'additional_driver_price' );
      foreach ( $cart_object->cart_contents as $key => $value ) {

        if ( $additional_driver_price > 0 || $additional_price > 0 ) {

          $additional_price = get_option( 'additional_person_price' );
          $additional_driver_price = get_option( 'additional_driver_price' );

          $additional_price = floatval( $additional_price ) * intval( $value['additional-persons'] );
          $additional_driver_price = floatval( $additional_driver_price ) * intval( $value['additional-drivers'] );

          $sum =( $additional_driver_price + $additional_price ) * WC()->cart->cart_contents[$key]['quantity'];
          $sum2 =( $additional_driver_price + $additional_price );

          WC()->cart->cart_contents[$key]['data']->price = floatval( $value['data']->price ) + $sum2;

          // $additional_sum = $sum / 1.23;
          // $additional_tax = $sum-$additional_sum;
          // if (!is_checkout()) {
          //   WC()->cart->cart_contents[$key]['line_total'] += $additional_sum;
          //   WC()->cart->cart_contents_total += $additional_sum;
          //   WC()->cart->subtotal += $sum;
          //   WC()->cart->subtotal_ex_tax += $additional_sum;
          //   WC()->cart->taxes[1] += $additional_tax;
          // }
          // WC()->cart->add_fee('Dodtkowe opcje',($additional_driver_price + $additional_price)*WC()->cart->cart_contents[$key]['quantity']);
        }
      }
    }
}
add_action( 'woocommerce_cart_calculate_fees', 'calculate_aditional_fees');

0 个答案:

没有答案