Cálculo de preço de item de carrinho personalizado com base em campos personalizados de dimensões no Woocommerce

Criei alguns campos personalizados de entrada nas páginas de produto único do woocommerce, nas quais o usuário pode inserir valores de altura e largura, respectivamente ... Quando o produto é adicionado ao carrinho, os valores dos campos personalizados também são exibidos na página do carrinho e da caixa.

Exemplo: se o usuário inserir altura = '15 'e largura = '20', sua exibição será na página do carrinho como height = 15 width = 20

página de produto único

página do carrinho

Agora, o que estou tentando alcançar é fazer um cálculo de preço personalizado com base nos valores dos campos personalizados "altura" e "largura":

preço total = (altura / 3 * largura / 30 + 3) * 1,48

O preço final calculado deve atualizar o preço do item do carrinho. Mas não consigo alcançar esta seção ou não sei como alcançá-la.

Aqui está o meu código:

/*
 * Display input on single product page
 * @return html
 */
function kia_satish_option(){
    $value = isset( $_POST['_satish_option'] ) ? sanitize_wp_checkbox( $_POST['_satish_option'] ) : '';
    printf( '<label>%s</label><input name="_satish_option" value="%s" type="number"/>', __( 'Height', 'kia-plugin-textdomain' ), esc_attr( $value ) );
}
add_action( 'woocommerce_before_add_to_cart_button', 'kia_satish_option', 9 );

function kia_satisher_option(){
    $value = isset( $_POST['_satisher_option'] ) ? sanitize_wp_checkbox( $_POST['_satisher_option'] ) : '';
    printf( '<label>%s</label><input name="_satisher_option" value="%s" type="number"/>', __( 'width', 'kia-plugin-textdomain' ), esc_attr( $value ) );
}
add_action( 'woocommerce_before_add_to_cart_button', 'kia_satisher_option', 9 );


function kia_yard_option(){
    $value = isset( $_POST['_yard_option'] ) ? sanitize_wp_checkbox( $_POST['_yard_option'] ) : '';
    printf( '<label>%s</label><input name="_yard_option" value="%s" type="number"/>', __( 'yard', 'kia-plugin-textdomain' ), esc_attr( $value ) );
}
add_action( 'woocommerce_before_add_to_cart_button', 'kia_yard_option', 9 );



/*
 * Add custom data to the cart item
 * @param array $cart_item
 * @param int $product_id
 * @return array
 */
function kia_add_cart_item_data( $cart_item, $product_id ){

    if( isset( $_POST['_satish_option'] ) ) {
        $cart_item['satish_option'] = sanitize_text_field( $_POST['_satish_option'] );
    }

    if( isset( $_POST['_satisher_option'] ) ) {
        $cart_item['satisher_option'] = sanitize_text_field( $_POST['_satisher_option'] );
    }

    if( isset( $_POST['_yard_option'] ) ) {
        $cart_item['yard_option'] = sanitize_text_field( $_POST['_yard_option'] );
    }

    return $cart_item;

}
add_filter( 'woocommerce_add_cart_item_data', 'kia_add_cart_item_data', 10, 2 );


/*
 * Load cart data from session
 * @param array $cart_item
 * @param array $other_data
 * @return array
 */
function kia_get_cart_item_from_session( $cart_item, $values ) {

    if ( isset( $values['satish_option'] ) ){
        $cart_item['satish_option'] = $values['satish_option'];
    }

    if ( isset( $values['satisher_option'] ) ){
        $cart_item['satisher_option'] = $values['satisher_option'];
    }

    if ( isset( $values['yard_option'] ) ){
        $cart_item['yard_option'] = $values['yard_option'];
    }

    return $cart_item;

}
add_filter( 'woocommerce_get_cart_item_from_session', 'kia_get_cart_item_from_session', 20, 2 );





/*
 * Add meta to order item
 * @param int $item_id
 * @param array $values
 * @return void
 */
function kia_add_order_item_meta( $item_id, $values ) {

    if ( ! empty( $values['satish_option'] ) ) {
        woocommerce_add_order_item_meta( $item_id, 'satish_option', $values['satish_option'] );           
    }

    if ( ! empty( $values['satisher_option'] ) ) {
        woocommerce_add_order_item_meta( $item_id, 'satisher_option', $values['satisher_option'] );           
    }
}
add_action( 'woocommerce_add_order_item_meta', 'kia_add_order_item_meta', 10, 2 );




/*
 * Get item data to display in cart
 * @param array $other_data
 * @param array $cart_item
 * @return array
 */
function kia_get_item_data( $other_data, $cart_item ) {

    if ( isset( $cart_item['satish_option'] ) ){

        $other_data[] = array(
            'name' => __( 'height', 'kia-plugin-textdomain' ),
            'value' => sanitize_text_field( $cart_item['satish_option'] )
        );

    }

    if ( isset( $cart_item['satisher_option'] ) ){

        $other_data[] = array(
            'name' => __( 'width', 'kia-plugin-textdomain' ),
            'value' => sanitize_text_field( $cart_item['satisher_option'] )
        );

    }

    if ( isset( $cart_item['yard_option'] ) ){

        $other_data[] = array(
            'name' => __( 'Yard', 'kia-plugin-textdomain' ),
            'value' => sanitize_text_field( $cart_item['yard_option'] )
        );

    }

    return $other_data;

}
add_filter( 'woocommerce_get_item_data', 'kia_get_item_data', 10, 2 );

Tentei alcançar a seção de fórmula pelo código abaixo:

    function woo_add_custom_general_fields_save($post_id)
{
    $woocommerce_product_height = $_POST['_product_height'];
    $woocommerce_product_width = $_POST['_product_width'];
    $woocommerce_final_price = $_POST['_final_price'];


// calculate and save _product_area_price, _regular_price, price as Height*Width
    if (!empty($woocommerce_product_height) && !empty($woocommerce_product_width)))
        $woocommerce_final_price = $woocommerce_product_height * $woocommerce_product_width ;

Mas isso não funciona ...

Como posso alterar o preço do item do carrinho com um cálculo personalizado com base nos dados personalizados do carrinho?

questionAnswers(2)

yourAnswerToTheQuestion