在 Woocommerce Bookings 中以编程方式设置可预订的产品基本成本 [英] Set bookable product base cost programatically in Woocommerce Bookings

查看:39
本文介绍了在 Woocommerce Bookings 中以编程方式设置可预订的产品基本成本的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试计算 WooCommerce 可预订产品的基本成本,并设法使用此方法完成:

I am trying to calculate the Base cost of a WooCommerce bookable product and managed to get it done using this:

    function modify_baseprice() {
       global $post;
       $productid = $post->ID;
       $product = new WC_Product($productid);
       $product_block_price = $product->wc_booking_block_cost;
       $product->wc_booking_cost = ($product_block_price*0.6) + 100;
       $pricing_data = update_post_meta( $productid, '_wc_booking_cost', $product->wc_booking_cost); 
       return $pricing_data; 
   }
   add_action( 'woocommerce_bookings_after_booking_base_cost', 'modify_baseprice', 10, 3 );

它确实正确计算了基本成本,但我需要刷新页面两次才能看到它出现在基本成本字段中.有没有办法让它在第一次保存后出现?

It does calculate the Base cost correctly but I need to refresh the page twice to see it appearing on the Base cost field. Is there a way that I can get it to appear after the first save?

推荐答案

自 Woocommerce 3 发布以来,CRUD 对象 已经实现.这是 WC_Product 对象和 Woocommerce Bookings 插件的情况.因此,您可以使用可用的 Getter 和 setter 方法,因为属性不再可访问(在大多数情况下).

Since Woocommerce 3 release, CRUD objects have been implemented. It's the case of WC_Product object and also for Woocommerce Bookings plugin. So you can use available Getters and setters methods as properties are not anymore accessible (in most cases).

以下代码使用了这种更好的方式(成本在产品中设置,无需刷新页面):

The following code use this better way (The cost is set in the product without any need of refreshing the page):

add_action( 'woocommerce_process_product_meta_booking', 'modify_bookable_product_base_cost', 100, 1 );
function modify_bookable_product_base_cost( $product_id ){
    // Get an instance of the WC_Product object
    $product = wc_get_product( $product_id );

    // We check that we have a block cost before
    if ( $product->get_block_cost() > 0 ){
        // Calculation
        $new_booking_cost = ( $product->get_block_cost() * 0.6 ) + 100;

        $product->set_cost( $new_booking_cost ); // Set the new calculated cost in the product
        $product->save(); // Save the product data
    }
}

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

Code goes in function.php file of your active child theme (active theme). Tested and works.

这篇关于在 Woocommerce Bookings 中以编程方式设置可预订的产品基本成本的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆