Php 在商务预订中以编程方式设置可预订产品的基本成本

Php 在商务预订中以编程方式设置可预订产品的基本成本,php,wordpress,woocommerce,product,woocommerce-bookings,Php,Wordpress,Woocommerce,Product,Woocommerce Bookings,我试图计算WooCommerce可预订产品的基本成本,并设法使用以下方法完成: function modify_baseprice() { global $post; $productid = $post->ID; $product = new WC_Product($productid); $product_block_price = $product->wc_booking_block_cost; $p

我试图计算WooCommerce可预订产品的基本成本,并设法使用以下方法完成:

    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 );
它确实正确地计算了基本成本,但我需要刷新页面两次,才能看到它出现在基本成本字段中。有没有办法让它在第一次保存后显示


自Woocommerce 3发布以来,已实施。这是
WC\u产品
对象的情况,也是Woocommerce预订插件的情况。因此,您可以使用可用的getter和setter方法,因为属性不再可访问(在大多数情况下)

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


代码进入活动子主题(活动主题)的function.php文件。已测试且有效。

您能否解释一下,我们是否可以使用类似的工具来控制“添加新产品”屏幕上的其他项目?例如,如果不是某些用户角色的唯一项目,我希望将可预订项目设置为默认项目,并隐藏/删除所有非必需选项。例如,由于引入了CRUD对象,某些过滤器的“默认产品类型”不再工作。
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
    }
}