覆盖 Woocommerce 公共功能 [英] Override Woocommerce public function
本文介绍了覆盖 Woocommerce 公共功能的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我想将这个函数从 class-product-addon-cart.php
覆盖到我的子主题 functions.php
:
I want to override this function from class-product-addon-cart.php
to my child theme functions.php
:
/**
* add_cart_item function.
*
* @access public
* @param mixed $cart_item
* @return void
*/
public function add_cart_item( $cart_item ) {
// Adjust price if addons are set
if ( ! empty( $cart_item['addons'] ) && apply_filters( 'woocommerce_product_addons_adjust_price', true, $cart_item ) ) {
$extra_cost = 0;
foreach ( $cart_item['addons'] as $addon ) {
if ( $addon['price'] > 0 ) {
$extra_cost += $addon['price'];
}
}
$cart_item['data']->adjust_price( $extra_cost );
}
return $cart_item;
}
我有一种来自 Woocommerce 预订插件的名为住宿产品的产品这是预订类的代码:
/**
* Class for the booking product type
*/
class WC_Product_Booking extends WC_Product {
private $availability_rules = array();
/**
* Constructor
*/
public function __construct( $product ) {
if ( empty ( $this->product_type ) ) {
$this->product_type = 'booking';
}
parent::__construct( $product );
}
因此,如果此产品是住宿产品,则执行该功能.
So if this product is an accomodation product then execute the function.
我写了这段代码,但它不起作用:
I wrote this code but it does not work :
$accomodation = new WC_Product_Booking( get_the_ID() );
$product = new WC_Product( get_the_ID() );
if ($accomodation) {
add_filter('woocommerce_product_addons_adjust_price', '__return_false');
} elseif($product) {
add_filter('woocommerce_product_addons_adjust_price', true);
}
感谢您的帮助!
推荐答案
add_filter('woocommerce_product_addons_adjust_price', 'rei_product_addons_adjust_price', 10, 2);
function rei_product_addons_adjust_price($is_adjust,$cart_item ){
$product = $cart_item['data'];
if ($product->is_type('booking')) {
$is_adjust = false;
}
return $is_adjust;
}
这篇关于覆盖 Woocommerce 公共功能的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文