添加一个将改变Woocommerce简单产品价格的选择字段

我需要在单个产品中添加一个自定义价格的选择,如下所示。

View post on imgur.com

在此处输入图像描述

我们的想法是,通过从(选择)中选择一个选项,您可以将其增加到基本价格。

不使用变体,因为我的想法是做更多的其他事情,但我需要帮助如何做到这一点。 (例)…

我见过这样做的插件被称为“附加组件”,但我不想使用插件。

要在简单产品中添加选择字段(例如在变量产品中),将根据所选的掺杂值更新基本价格,请尝试以下操作:

// Frontend: custom select field in product single pages add_action( 'woocommerce_before_add_to_cart_button', 'fabric_length_product_field' ); function fabric_length_product_field() { global $product; if( $product->is_type('variable') ) return; // Not variable products $domain = 'woocommerce'; $text = array( __('cards', $domain), __('card', $domain), __('Total', $domain), get_woocommerce_currency_symbol(), ); // Select Options array $options = array( "" => __('Select package'), "12.00" => "1000 {$text[0]} - {$text[3]}0.012/{$text[1]} - {$text[2]} {$text[3]}12.00", "15.00" => "2000 {$text[0]} - {$text[3]}0.008/{$text[1]} - {$text[2]} {$text[3]}15.00", "20.00" => "3000 {$text[0]} - {$text[3]}0.007/{$text[1]} - {$text[2]} {$text[3]}20.00", "25.00" => "4000 {$text[0]} - {$text[3]}0.006/{$text[1]} - {$text[2]} {$text[3]}25.00", ); // Select field woocommerce_form_field('cards_pack', array( 'type' => 'select', 'class' => array('my-field-class form-row-wide'), 'label' => __('Cards Pack selection', $domain), 'required' => true, 'options' => $options, ),''); // Data to be transmitted to jQuery $base_price = (float) wc_get_price_to_display( $product ); $prices = array( '' => wc_price($base_price), '12.00' => wc_price($base_price + 12), '15.00' => wc_price($base_price + 15), '20.00' => wc_price($base_price + 20), '25.00' => wc_price($base_price + 25), ) // jQuery code ?>  get_price(); // New price calculation $new_price = $base_price + $pack_price; // Prepare and save the data array $cart_item_data['pack_data'] = array( 'cards' => (int) $cards, 'pack' => (int) $pack_price, 'new_price' => (float) $new_price, ); $cart_item_data['unique_key'] = md5( microtime() . rand() ); // Make each item unique return $cart_item_data; } // Set conditionally a custom item price add_action('woocommerce_before_calculate_totals', 'set_cutom_cart_item_price', 20, 1); function set_cutom_cart_item_price( $cart ) { if ( is_admin() && ! defined( 'DOING_AJAX' ) ) return; if ( did_action( 'woocommerce_before_calculate_totals' ) >= 2 ) return; foreach ( $cart->get_cart() as $cart_item ) { if ( isset( $cart_item['pack_data']['new_price'] ) ) $cart_item['data']->set_price( $cart_item['pack_data']['new_price'] ); } } // Display custom data in checkout page add_filter( 'woocommerce_get_item_data', 'display_custom_cart_item_data', 10, 2 ); function display_custom_cart_item_data( $cart_data, $cart_item ) { $domain = 'woocommerce'; if ( isset( $cart_item['pack_data']['new_price'] ) ){ $cart_data[] = array('name' => __( 'Cards pack', $domain ), 'value' => $cart_item['pack_data']['cards'] ); } return $cart_data; } 

代码位于活动子主题(或活动主题)的function.php文件中。 经过测试和工作。

在此处输入图像描述