我有关于计算WooCommerce购物车的问题。 我想在每个产品中添加一个Handing fee字段,并大大计算购物车中的总费用。 根据我的研究,我在我的产品中创造了一个领域。 Demo-1
我的下一步是在购物车中计算此字段。
我也在谷歌搜索过这个问题,但我只能找到一些解决方案(Wordpress: Add extra fee in cart)来计算固定费用而不是戏剧性的功能。
Demo-2
// Display Fields
add_action( 'woocommerce_product_options_general_product_data', 'woo_add_custom_general_fields' );
// Save Fields
add_action( 'woocommerce_process_product_meta', 'woo_add_custom_general_fields_save' );
function woo_add_custom_general_fields() {
global $woocommerce, $post;
echo '<div class="options_group">';
// Custom fields will be created here...
woocommerce_wp_text_input(
array(
'id' => '_number_field',
'label' => __( 'Environmental fee', 'woocommerce' ),
'placeholder' => '',
'description' => __( 'Enter the custom value here.', 'woocommerce' ),
'type' => 'number',
'custom_attributes' => array(
'step' => 'any',
'min' => '0'
)
)
);
echo '</div>';
}
function woo_add_custom_general_fields_save( $post_id ){
// Number Field
$woocommerce_number_field = $_POST['_number_field'];
if( !empty( $woocommerce_number_field ) )
update_post_meta( $post_id, '_number_field', esc_attr( $woocommerce_number_field ) );
}
add_action( 'woocommerce_cart_calculate_fees','endo_handling_fee' );
function endo_handling_fee() {
global $woocommerce;
if ( is_admin() && ! defined( 'DOING_AJAX' ) )
return;
$fee = 5.00;
$woocommerce->cart->add_fee( 'Handling', $fee, true, 'standard' );
}
如何修改功能来统计每个产品&#39;费用,从我创建的自定义字段中提供的值,在小计列中?
现在,我正在尝试以下代码。 我认为关键是如何抓住产品的价值并将价值作为变量。
add_action('woocommerce_cart_calculate_fees' , 'add_custom_fees');
function add_custom_fees( WC_Cart $cart ){
$fees = 0;
foreach( $cart->get_cart() as $item ){
$fees += $item[ 'quantity' ] * 0.08;
}
if( $fees != 0 ){
$cart->add_fee( 'Handling fee', $fees);
}
}
答案 0 :(得分:2)
您需要的功能是get_post_meta来获取自定义字段的值。
$prod_fee = get_post_meta($item['product_id'] , '_number_field', true);
然后你可以积累这个并将其显示为合并费用。
答案 1 :(得分:0)
您需要从产品的元数据中获取产品费用,因为@Anfelipe会提供代码
$prod_fee = get_post_meta($item['product_id'] , '_number_field', true);
之后你需要添加条件或进行计算。
function add_custom_fees( WC_Cart $cart ){
$fees = 0;
$prod_fee = get_post_meta($item['product_id'] , '_number_field', true);
foreach( $cart->get_cart() as $item ){
$fees += $item[ 'quantity' ] * $prod_fee ;
}
if( $fees != 0 ){
$cart->add_fee( 'Handling fee', $fees);
}
}