我在woocommerce单个产品页面中创建了一些输入自定义字段,用户可以分别输入高度和宽度值...当产品添加到购物车时,自定义字段值也显示在购物车和结帐页面中 .
示例:如果用户输入高度='15'且宽度='20',则其显示为购物车页面,如height = 15 width = 20
single product page
cart page
现在Iém试图实现的是根据“高度”和“宽度”自定义字段值进行自定义价格计算:
总价=(高/ 3 宽/ 30 3) 1.48
最终计算的价格应更新购物车商品价格 . 但是我无法实现这一部分,或者我不知道如何实现它 .
这是我的代码:
/*
* 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 );
我尝试通过以下代码实现公式部分:
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 ;
但它不起作用......
如何根据自定义购物车数据自定义计算更改购物车商品价格?
2 回答
我完全重新审视了你的代码,删除了一些小东西,重命名了其他代码并添加了缺少的部分......
你的计算看起来很奇怪:
一切正常,如果需要,您可以轻松更改计算...
代码:
代码位于活动子主题(或活动主题)的function.php文件中 . 经过测试和工作 .
很抱歉再次敲门,但是当我添加上面一行时它的抛出错误