仅针对 Woocommerce 中的特定产品设置购物车项目产品生成的销售价格

问题描述 投票:0回答:1

在 WooCommerce 3 中以编程方式仅设置特定产品销售价格后,相关购物车商品价格不会使用产品生成的销售价格进行更新。 如何获取相关购物车商品中特定产品生成的销售价格?

如有任何帮助,我们将不胜感激。

php wordpress woocommerce cart product-price
1个回答
1
投票

// HERE below in the array set your specific product IDs function specific_product_ids(){ return array(37, 41); // <=== <=== <=== <=== Your Product IDs } // Generating dynamically the product "regular price" add_filter( 'woocommerce_product_get_regular_price', 'custom_dynamic_regular_price', 10, 2 ); add_filter( 'woocommerce_product_variation_get_regular_price', 'custom_dynamic_regular_price', 10, 2 ); function custom_dynamic_regular_price( $regular_price, $product ) { if( ( empty($regular_price) || $regular_price == 0 ) && in_array($product->get_id(), specific_product_ids() ) ) return $product->get_price(); else return $regular_price; } // Generating dynamically the product "sale price" add_filter( 'woocommerce_product_get_sale_price', 'custom_dynamic_sale_price', 10, 2 ); add_filter( 'woocommerce_product_variation_get_sale_price', 'custom_dynamic_sale_price', 10, 2 ); function custom_dynamic_sale_price( $sale_price, $product ) { $rate = 0.8; if( ( empty($regular_price) || $regular_price == 0 ) && in_array($product->get_id(), specific_product_ids() ) ) return $product->get_regular_price() * $rate; else return $sale_price; }; // Displayed formatted regular price + sale price add_filter( 'woocommerce_get_price_html', 'custom_dynamic_sale_price_html', 20, 2 ); function custom_dynamic_sale_price_html( $price_html, $product ) { if( $product->is_type('variable') ) return $price_html; if( in_array($product->get_id(), specific_product_ids() ) ) { $price_html = wc_format_sale_price( wc_get_price_to_display( $product, array( 'price' => $product->get_regular_price() ) ), wc_get_price_to_display( $product, array( 'price' => $product->get_sale_price() ) ) ) . $product->get_price_suffix(); } return $price_html; } // Set cart item generated "sale price" for specific product IDs add_action( 'woocommerce_before_calculate_totals', 'set_cart_item_sale_price', 10, 1 ); function set_cart_item_sale_price( $cart ) { if ( is_admin() && ! defined( 'DOING_AJAX' ) ) return; // Iterate through each cart item foreach( $cart->get_cart() as $cart_item ) { if( in_array($cart_item['data']->get_id(), specific_product_ids() ) ) { $price = $cart_item['data']->get_sale_price(); // get sale price $cart_item['data']->set_price( $price ); // Set the sale price } } }

代码位于活动子主题(活动主题)的 function.php 文件中。已测试并有效。

© www.soinside.com 2019 - 2024. All rights reserved.