Woocommerce $cart_item['data']->set_price() 不起作用

Dor*_*tto 5 php wordpress woocommerce

我尝试动态更改产品的价格。我已经安装了插件WC_fields_Factory,并添加了一些字段来插入价格。

这是我的更改价格代码:

add_filter( 'woocommerce_get_cart_item_from_session', array( $this, 'get_cart_item_from_session' ), 10, 2 );
        add_filter( 'woocommerce_add_cart_item', array( $this, 'simone_add_cart_item' ), 10, 1 );
        add_action( 'woocommerce_before_calculate_totals', array( $this, 'simone_update_price'), 99 );
Run Code Online (Sandbox Code Playgroud)

[...]

private function _getPrice($product_id, $price) {
        $all_fields = apply_filters( 'wcff/load/all_fields', $product_id, 'wccpf' );
        $prezzoCalcolato = 0;
        foreach ( $all_fields as $title => $fields )
        {
            foreach ( $fields as $field )
            {
                if( isset($field['field_valore']) && $field['field_grouprice'] == 'price-var' )
                {
                    $quantita = isset($_REQUEST[ $field["name"] ]) ? intval($_REQUEST[ $field["name"] ]) : 0;
                    $prezzoCalcolato =  intval($quantita) * intval($field['field_valore']);
                } elseif( isset($field['field_valore']) && $field['field_grouprice'] == 'price-fix' ) {
                    $prezzoCalcolato =  intval($field['field_valore']) ;
                }
            }
        }
        $prezzoCalcolato += $price;

        return $prezzoCalcolato; 
    }

    public function simone_add_cart_item( $cart_item, $cart_item_key ) {
        $price = $this->_getPrice($cart_item['product_id'], $cart_item['data']->get_price());
        $cart_item['data']->set_price($price);

        return $cart_item;
    }

    public function get_cart_item_from_session( $cart_item, $values ) {
        $price = $this->_getPrice($cart_item['product_id'], $cart_item['data']->get_price());
        $cart_item['data']->set_price($price);

        return $cart_item;
    }

    public function simone_update_price($cart) {

        foreach($cart->get_cart() as $cart_key_item => $cart_item) {
            $price = $this->_getPrice($cart_item['product_id'], $cart_item['data']->get_price());
            $cart_item['data']->set_price($price);
        }
    }
Run Code Online (Sandbox Code Playgroud)

它不起作用...现在,当我尝试将成本添加到产品的正常价格中时,会发生以下情况:

$cart_item['data']->set_price(57);工作正常,否则我设定的价格如下:

$prezzo = 57;
$cart_item['data']->set_price($prezzo);
Run Code Online (Sandbox Code Playgroud)

它不起作用-.-我尝试像这样设置 floatval 或 intval :

$cart_item['data']->set_price(intval($prezzo));
Run Code Online (Sandbox Code Playgroud)

没有什么不行的:(

网上解决办法有:

 add_action( 'woocommerce_before_calculate_totals', 'add_custom_price' );

 function add_custom_price( $cart_object ) {
     $custom_price = 10; // This will be your custome price  
     foreach ( $cart_object->cart_contents as $key => $value ) {
         $value['data']->price = $custom_price;


  } }
Run Code Online (Sandbox Code Playgroud)

或者

add_action( 'woocommerce_before_calculate_totals', 'add_custom_price' );

 function add_custom_price( $cart_object ) {
     $custom_price = 10; // This will be your custome price  
     foreach ( $cart_object->cart_contents as $key => $value ) {
         $value['data']->set_price($custom_price);
   } }
Run Code Online (Sandbox Code Playgroud)

他们不起作用!