Установить основную стоимость бронируемых товаров в Woocommerce Bookings - PullRequest
0 голосов
/ 15 ноября 2018

Я пытаюсь рассчитать базовую стоимость бронируемого продукта 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 );

Он правильно рассчитывает базовую стоимость, но мне нужно дважды обновить страницу, чтобыувидеть его в поле «Базовая стоимость».Есть ли способ, чтобы я мог отобразить его после первого сохранения?

enter image description here

1 Ответ

0 голосов
/ 15 ноября 2018

Со времени выпуска Woocommerce 3, CRUD объекты были реализованы.Это относится к объекту WC_Product, а также к плагину Woocommerce Bookings.Таким образом, вы можете использовать доступные методы Getters и setters, так как свойства больше не доступны (в большинстве случаев).

Следующий код использует этот лучший способ (Стоимость устанавливается в продукте без необходимости обновлениястраницы) :

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 вашей активной дочерней темы (активной темы).Проверено и работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...