Set bookable product base cost programatically in Woocommerce Bookings

删除回忆录丶 提交于 2019-12-11 03:56:21

问题


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?


回答1:


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
    }
}

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



来源:https://stackoverflow.com/questions/53326767/set-bookable-product-base-cost-programatically-in-woocommerce-bookings

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!