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)
他们不起作用!