在 Woocommerce Bookings 中以编程方式设置可预订的产品基本成本 [英] Set bookable product base cost programatically in 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屋!