我已经尝试了一段时间了,但我还没有找到任何解决方案可以完全满足我们的需求,我远不是一个PHP专家,所以我有点迷茫。
我们使用的是WooCommerce和WooTickets。我们的目标是只对 "门票 "类的产品(ID:34)增加5%的 "服务费 "费用。
我们找到了这个代码剪贴器,它可以在产品类别的基础上增加一个固定的费用。
// Add Service Fee to Category
function woo_add_cart_fee() {
$category_ID = '23';
global $woocommerce;
foreach ($woocommerce->cart->cart_contents as $key => $values ) {
// Get the terms, i.e. category list using the ID of the product
$terms = get_the_terms( $values['product_id'], 'product_cat' );
// Because a product can have multiple categories, we need to iterate through the list of the products category for a match
foreach ($terms as $term) {
// 23 is the ID of the category for which we want to remove the payment gateway
if($term->term_id == $category_ID){
$excost = 6;
}
}
$woocommerce->cart->add_fee('Service Fee', $excost, $taxable = false, $tax_class = '');
}
}
add_action( 'woocommerce_cart_calculate_fees', 'woo_add_cart_fee' );
这个解决方案的主要问题是它增加了一个固定的成本,而我们需要一个百分比的成本。
我们还从WooThemes自己找到了这个代码片段。
/**
* Add a 1% surcharge to your cart / checkout
* change the $percentage to set the surcharge to a value to suit
* Uses the WooCommerce fees API
*
* Add to theme functions.php
*/
add_action( 'woocommerce_cart_calculate_fees','woocommerce_custom_surcharge' );
function woocommerce_custom_surcharge() {
global $woocommerce;
if ( is_admin() && ! defined( 'DOING_AJAX' ) )
return;
$percentage = 0.05;
$surcharge = ( $woocommerce->cart->cart_contents_total + $woocommerce->cart->shipping_total ) * $percentage;
$woocommerce->cart->add_fee( 'Service Fee', $surcharge, true, 'standard' );
}
但是这个解决方案又有几个问题......
1)没有考虑到产品类别2)它根据整个购物车的价值增加了费用,但它应该只对 "门票 "产品类别中的产品增加5%的费用,而不是整个购物车。
我也遇到了同样的问题,遇到了一个代码片段,让我走上了正确的道路。 在我的生活中,我无法找到存放该代码段的原始网站,但这里是我的重做版本。
function df_add_ticket_surcharge( $cart_object ) {
global $woocommerce;
$specialfeecat = 86; // category id for the special fee
$spfee = 0.00; // initialize special fee
$spfeeperprod = 0.05; //special fee per product
foreach ( $cart_object->cart_contents as $key => $value ) {
$proid = $value['product_id']; //get the product id from cart
$quantiy = $value['quantity']; //get quantity from cart
$itmprice = $value['data']->price; //get product price
$terms = get_the_terms( $proid, 'product_cat' ); //get taxonamy of the prducts
if ( $terms && ! is_wp_error( $terms ) ) :
foreach ( $terms as $term ) {
$catid = $term->term_id;
if($specialfeecat == $catid ) {
$spfee = $spfee + $itmprice * $quantiy * $spfeeperprod;
}
}
endif;
}
if($spfee > 0 ) {
$woocommerce->cart->add_fee( 'Ticket Concierge Charge', $spfee, true, 'standard' );
}
}
add_action( 'woocommerce_cart_calculate_fees', 'df_add_ticket_surcharge' );
这将为购物车中的每件商品添加5%的附加费,类别为票据(ID:86)。 如果你还没有找到解决方案,希望这能帮助你。
谢谢你发布上面这段代码。我需要的正是这个,但有一些问题,我。我不希望类别是它的一部分,我希望它适用于所有的产品,我还要求每个产品的固定费用。
另一个问题是,如果我的购物车里有2个不同的产品,它只能计算为1个产品,所以我做了一些研究,并找到了一种方法来计算购物车里的产品总数。所以这里是我最后的代码。我想它可能会帮助其他人寻找类似的答案。
/** add handling fee **/
function df_add_handling_fee( $cart_object ) {
global $woocommerce;
// $specialfeecat = 3711; // category id for the special fee
$spfee = 0.00; // initialize special fee
$spfeeperprod = 10; //special fee per product
//Getting Cart Contents.
$cart = $woocommerce->cart->get_cart();
//Calculating Quantity
foreach($cart as $cart_val => $cid){
$qty += $cid['quantity'];
}
foreach ( $cart_object->cart_contents as $key => $value ) {
$proid = $value['product_id']; //get the product id from cart
//$quantiy = $value['quantity']; //get quantity from cart
$itmprice = $value['data']->price; //get product price
$terms = get_the_terms( $proid, 'product_cat' ); //get taxonamy of the prducts
if ( $terms && ! is_wp_error( $terms ) ) :
foreach ( $terms as $term ) {
//$catid = $term->term_id;
//if($specialfeecat == $catid ) {
$spfee = $qty * $spfeeperprod;
//}
}
endif;
}
if($spfee > 0 ) {
$woocommerce->cart->add_fee( 'Handling Fee', $spfee, true, 'standard' );
}
}
add_action( 'woocommerce_cart_calculate_fees', 'df_add_handling_fee' );
正如你所看到的,我只是注释了原始代码中的部分。希望有人能从中受益:)