Php 禁用购物车行项目数量价格计算

Php 禁用购物车行项目数量价格计算,php,wordpress,woocommerce,cart,price,Php,Wordpress,Woocommerce,Cart,Price,我正在寻找可以在购物车页面中禁用数量x商品价格的功能 通常情况下,如果产品价格为1欧元,数量为3欧元,行项目小计为3欧元 现在我想保留产品价格,不进行x数量计算,如下: 产品价格为1欧元,数量为3欧元;商品小计为1欧元 有人知道如何禁用此数量价格计算吗?是的,可以禁用数量项目价格计算,但它相当复杂 守则: // Custom line item Total/Subtotal price display add_filter( 'woocommerce_cart_product_subtotal'

我正在寻找可以在购物车页面中禁用数量
x
商品价格的功能

通常情况下,如果产品价格为1欧元,数量为3欧元,行项目小计为3欧元

现在我想保留产品价格,不进行x数量计算,如下:
产品价格为1欧元,数量为3欧元;商品小计为1欧元


有人知道如何禁用此数量价格计算吗?

是的,可以禁用数量项目价格计算,但它相当复杂

守则:

// Custom line item Total/Subtotal price display
add_filter( 'woocommerce_cart_product_subtotal', 'custom_cart_subtotal', 10, 4 );
function custom_cart_subtotal( $product_subtotal, $product, $quantity, $wc_cart ) {
    $price   = $product->get_price();
    $taxable = $product->is_taxable();
    $quantity = 1; // HERE We set the quantity to 1 (So the price is calculated on a quantitity of 1)

    // Taxable
    if ( $taxable ) {
        if ( 'excl' === $wc_cart->tax_display_cart ) {
            $row_price        = wc_get_price_excluding_tax( $product, array( 'qty' => $quantity ) );
            $product_subtotal = wc_price( $row_price );

            if ( $wc_cart->prices_include_tax && $wc_cart->tax_total > 0 ) {
                $product_subtotal .= ' <small class="tax_label">' . WC()->countries->ex_tax_or_vat() . '</small>';
            }
        } else {
            $row_price        = wc_get_price_including_tax( $product, array( 'qty' => $quantity ) );
            $product_subtotal = wc_price( $row_price );

            if ( ! $wc_cart->prices_include_tax && $wc_cart->tax_total > 0 ) {
                $product_subtotal .= ' <small class="tax_label">' . WC()->countries->inc_tax_or_vat() . '</small>';
            }
        }

    } // Non-taxable
    else {
        $row_price        = $price * $quantity;
        $product_subtotal = wc_price( $row_price );
    }
    return $product_subtotal;
}

// Custom cart subtotal and totals (Prices calculated on quatity = 1)
add_action( 'woocommerce_calculate_totals', 'custom_item_price', 10, 1);
function custom_item_price( $wc_cart ) {
    if ( is_admin() && ! defined( 'DOING_AJAX' ) ) return;

    $cart_contents_total = 0;

    foreach ( $wc_cart->get_cart() as $cart_item_key => $cart_item )
        $cart_contents_total += floatval( strip_tags( $wc_cart->get_product_subtotal( $cart_item['data'], 1 ) ) );

    $wc_cart->subtotal = $cart_contents_total;
    $wc_cart->subtotal_ex_tax = $cart_contents_total;
    $wc_cart->cart_contents_total = $cart_contents_total;
}

// Custom cart subtotal and totals (Prices calculated on quatity = 1)
add_action( 'woocommerce_cart_get_taxes', 'custom_cart_get_taxes', 10, 2);
function custom_cart_get_taxes( $taxes, $wc_cart ) {
    if ( is_admin() && ! defined( 'DOING_AJAX' ) ) return;

    $taxes = $subtotal_taxes = array();

    foreach ( $wc_cart->get_cart() as $cart_item_key => $cart_item ){
        foreach( $cart_item['line_tax_data']['subtotal'] as $key => $tax_price ){
            if( $tax_price > 0 ){
                if( array_key_exists($key, $subtotal_taxes))
                    $subtotal_taxes[$key] += number_format( $tax_price / $cart_item['quantity'], 2 );
                else
                    $subtotal_taxes[$key] = number_format( $tax_price / $cart_item['quantity'], 2 );
            } else {
                if( array_key_exists($key, $subtotal_taxes))
                    $subtotal_taxes[$key] += $tax_price;
                else
                    $subtotal_taxes[$key] = $tax_price;
            }
        }
    }
    foreach ( array_keys( $subtotal_taxes + $wc_cart->get_shipping_taxes() ) as $key ) {
        $taxes[ $key ] = ( isset( $wc_cart->get_shipping_taxes()[ $key ] ) ? $wc_cart->get_shipping_taxes()[ $key ] : 0 ) + ( isset( $subtotal_taxes[ $key ] ) ? $subtotal_taxes[ $key ] : 0 );
    }
    return $taxes;
}


// Custom line item Total/Subtotal set order prices (Prices calculated on quatity = 1)
add_action( 'woocommerce_checkout_create_order_line_item', 'custom_checkout_create_order_line_item', 10, 4  );
function custom_checkout_create_order_line_item( $item, $cart_item_key, $values, $order ){

    $line_tax_data = array();
    foreach( $values['line_tax_data'] as $key_line => $tax ){
        foreach( $tax as $key => $tax_price ){
            if( $tax_price > 0 )
                $line_tax_data[$key_line] = array( $key => number_format( $tax_price / $values['quantity'], 2 ) );
            else
                $line_tax_data[$key_line] = array( $key => $tax_price );
        }
    }

    $item->set_props( array(
        'quantity'     => $values['quantity'],
        'variation'    => $values['variation'],
        'subtotal'     => number_format( $values['line_subtotal'] / $values['quantity'], 2 ),
        'total'        => number_format( $values['line_total'] / $values['quantity'], 2 ),
        'subtotal_tax' => number_format( $values['line_subtotal_tax'] / $values['quantity'], 2 ),
        'total_tax'    => number_format( $values['line_tax'] / $values['quantity'], 2 ),
        'taxes'        => $line_tax_data,
    ) );
}

// Get the correct Cart gran total amount
add_filter( 'woocommerce_calculated_total', 'custom_calculated_total', 10, 2 );
function custom_calculated_total( $price_total, $wc_cart ){
    $tax_total = 0;
    $taxes_arr = $wc_cart->get_taxes();
    foreach($taxes_arr as $tax)
        $tax_total += $tax;
    return round( $wc_cart->cart_contents_total + $tax_total + $wc_cart->shipping_total + $wc_cart->fee_total, $wc_cart->dp );
}

// Replacing the total tax amount
add_action( 'woocommerce_checkout_create_order', 'custom_set_order_tax_total', 10, 1 );
function custom_set_order_tax_total( $order ) {
    $subtotal_taxes = 0;

    foreach ( WC()->cart->get_cart() as $cart_item_key => $cart_item ){
        foreach( $cart_item['line_tax_data']['subtotal'] as $key => $tax_price ){
            if( $tax_price > 0 ){
                $subtotal_taxes += number_format( $tax_price / $cart_item['quantity'], 2 );
            } else {
                $subtotal_taxes += $tax_price;
            }
        }
    }
    $order->set_cart_tax( $subtotal_taxes );
}


// Update order line item tax total
add_action( 'woocommerce_checkout_update_order_meta', 'custom_update_order_item_tax_total', 10, 1 );
function custom_update_order_item_tax_total( $order_id ) {

    global $wpdb;
    $query = $wpdb->get_results( "
        SELECT woim.meta_id, woim.order_item_id as item_id, woi.order_item_type as type, woim.meta_key as akey, woim.meta_value as value
        FROM {$wpdb->prefix}woocommerce_order_items AS woi
        INNER JOIN {$wpdb->prefix}woocommerce_order_itemmeta AS woim ON woi.order_item_id = woim.order_item_id
        WHERE woi.order_id = $order_id
        AND woim.meta_key IN ( 'tax_amount', '_line_tax_data', 'rate_id' )
    " );

    $taxes = $items = array();
    foreach( $query as $result){
        if( $result->type == 'line_item' ){
            $result_taxes = maybe_unserialize( $result->value );
            foreach( $result_taxes['subtotal'] as $tax_id => $tax_price )
                $taxes[$tax_id] = $tax_price;
        } elseif( $result->type == 'tax' && $result->akey == 'rate_id' ) {
            $items[$result->item_id] = array(
                'price' => $taxes[$result->value],
                'rate_id' => $result->value
            );
        } else {
            $items[$result->item_id]['meta_id'] = $result->meta_id;
        }
    }
    foreach($items as $item_id => $values){
        wc_update_order_item_meta( $item_id, 'tax_amount', $values['price'] );
    }
}
//自定义行项目总价/小计价格显示
添加过滤器('woocommerce\u cart\u product\u subtotal','custom\u cart\u subtotal',10,4);
函数自定义购物车小计($product\U小计,$product,$QUOTE,$wc\U购物车){
$price=$product->get_price();
$TANDABLE=$product->是否应纳税();
$quantity=1;//这里我们将数量设置为1(因此价格是按1的数量计算的)
//应税
若有($应税){
如果('excl'==$wc\U购物车->税务\U显示\U购物车){
$row_price=wc_get_price_不含税($product,array('qty'=>$quantity));
$product\U小计=wc\U价格($row\U价格);
如果($wc\U购物车->价格\U包括税和$wc\U购物车->税总额>0){
$product_小计=''.WC()->国家->出口税或增值税();
}
}否则{
$row_price=wc_get_price_,包括税($product,array('qty'=>$quantity));
$product\U小计=wc\U价格($row\U价格);
如果(!$wc\u购物车->价格\u包括税和$wc\u购物车->税总额>0){
$product_小计=''.WC()->国家->公司税或增值税();
}
}
}//不征税
否则{
$row_价格=$price*$数量;
$product\U小计=wc\U价格($row\U价格);
}
返回$product\u小计;
}
//自定义购物车小计和总计(按数量=1计算的价格)
添加操作('woocommerce\u calculate\u totals'、'custom\u item\u price',10,1);
功能自定义商品价格($wc\U购物车){
if(is_admin()&&!defined('DOING_AJAX'))返回;
$cart\u contents\u total=0;
foreach($wc\u cart->get\u cart()作为$cart\u item\u key=>$cart\u item)
$cart\u contents\u total+=floatval(带标签($wc\u cart->get\u product\u小计($cart\u item['data'],1));
$wc\u cart->subtotal=$cart\u contents\u total;
$wc\u cart->subtotal\u exu tax=$cart\u contents\u total;
$wc\u cart->cart\u contents\u total=$cart\u contents\u total;
}
//自定义购物车小计和总计(按数量=1计算的价格)
添加操作('woocommerce\u cart\u get\u taxes'、'custom\u cart\u get\u taxes',10,2);
函数custom\u cart\u get\u taxes($taxes,$wc\u cart){
if(is_admin()&&!defined('DOING_AJAX'))返回;
$taxes=$subtotal_taxes=array();
foreach($wc\u cart->get\u cart()作为$cart\u item\u key=>$cart\u item){
foreach($key=>$tax\u价格的购物车项目['line\u tax\u data']['subtotal']{
如果($tax_price>0){
如果(数组项存在($key,$subtotal_taxes))
$subtotal_taxes[$key]+=number_格式($tax_price/$cart_item['quantity',2);
其他的
$subtotal_taxes[$key]=数字格式($tax_price/$cart_item['quantity',2);
}否则{
如果(数组项存在($key,$subtotal_taxes))
$subtotal_taxes[$key]+=$tax_price;
其他的
$subtotal_taxes[$key]=$tax_price;
}
}
}
foreach(数组_键($subtotal_taxes+$wc_cart->get_shipping_taxes())作为$key){
$taxes[$key]=(isset($wc\u cart->get\u shipping\u taxes()[$key])?$wc\u cart->get\u shipping\u taxes()[$key]:0)+(isset($subtotal\u taxes[$key])?$subtotal\u taxes[$key]:0);
}
退还$TAX;
}
//自定义行项目总/小计集合订单价格(数量=1时计算的价格)
添加操作('woocommerce\u checkout\u create\u order\u line\u item','custom\u checkout\u create\u order\u line\u item',10,4);
函数自定义\签出\创建\订单\行\项目($item、$cart\项目\ key、$values、$order){
$line_tax_data=array();
foreach($key\u line=>$tax的值['line\u tax\u data']{
foreach($key=>$tax\u价格){
如果($tax_price>0)
$line_tax_data[$key_line]=数组($key=>number_格式($tax_price/$values['quantity',2));
其他的
$line\u tax\u data[$key\u line]=数组($key=>$tax\u price);
}
}
$item->set_道具(阵列)(
“数量”=>$values[“数量”],
'variation'=>$values['variation'],
“小计”=>number\u格式($values['line\u subtotal']/$values['quantity'],2),
“总计”=>number\u格式($values['line\u total']/$values['quantity'],2),
“小计税”=>数字税格式($values['line\u小计税]]/$values['quantity'],2),
“总税”=>数字税格式($values['line\u tax']/$values['quantity'],2),
“taxes”=>$line\u tax\u数据,
) );
}
//获取正确的购物车总金额
添加过滤器('woocommerce\u calculated\u total','custom\u calculated\u total',10,2);
函数自定义计算总额($price\u total,$wc\u cart){
$tax_total=0;
$taxes\u arr=$wc\u cart->get\u taxes();
foreach($taxes\u arr as$tax)
$tax_total+=$tax;
返回回合($wc\u cart->cart\u contents\u total+$tax\u total+$wc\u cart->shipping\u total+$wc\u cart->fee\u total,$wc\u cart->dp);
}
//替换总税额
添加操作('woocommerce\u checkout\u create\u order'、'custom\u set\u order\u tax\u total',10,1);
函数自定义\设置\订单\税费\总计($order){
$subtotal_taxes=0;
foreach(WC()->cart->get_cart()作为$cart\u item\u key=>$cart\u item){
foreach($cart_item['line_tax_data']['subt