【问题标题】:Override Woocommerce public function覆盖 Woocommerce 公共功能
【发布时间】:2016-01-28 08:37:47
【问题描述】:

我想将此函数从class-product-addon-cart.php 覆盖到我的子主题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 );
    }

所以如果这个产品是一个住宿产品,那么执行这个功能。

我写了这段代码,但它不起作用:

$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', '__return_false');
  • 它工作,现在我不知道你是否可以从那里帮助,但你知道如何说这个产品是一个简单的产品或变量然后添加这行代码吗?
  • 请检查我的答案,让我知道它是否有效..

标签: php wordpress woocommerce


【解决方案1】:
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;

}

【讨论】:

  • 我已经更新了代码..试试看...如果类型是预订,这将删除foreach...如果这就是您的意思...
  • 我相信这现在与最后一个问题无关......它不是要编辑的同一个文件..这次你可以接受答案,如果最后一个问题有效并问另一个一。
猜你喜欢
  • 1970-01-01
  • 2016-10-20
  • 1970-01-01
  • 2022-10-14
  • 1970-01-01
  • 1970-01-01
  • 2015-01-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多