如何在WooCommerce购物车中将自定义字段计为额外费用?

时间:2015-10-18 00:28:38

标签: php wordpress woocommerce

我有关于计算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);
}
}

2 个答案:

答案 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);
    }
}