根据产品尺寸和类别定制费用

时间:2017-01-14 21:12:57

标签: php wordpress woocommerce cart

我的Woocommerce网站处于独特的境地。

我需要加一个包装费,这与手续费有些相似。

不幸的是,这并不像为每个订单增加5.00美元的手续费那么简单。

由于我根据其尺寸(宽x高)销售木制品,因此包装费基于商品的总面积。它们也可以根据项目的类别而有所不同。

我做了大量的研究,但是我找不到一个插件来处理这种情况。

为了增加复杂性,需要创建一个完整的表。例如,如果来自一个类别的项目的总面积在1-10之间,则包装费用将 $ 10 。如果总平方英尺在11-20之间,那么它将 $ 20

我该如何做到这一点?

由于

1 个答案:

答案 0 :(得分:1)

  

已更新:已添加WooCommerce 3+兼容性

使用 woocommerce_cart_calculate_fees 挂钩中的add_fee()方法,这是可行且轻松。以下是简单产品的简单用法示例,包含2个类别,并基于购物车每个项目的产品尺寸测量计算。它也适用于其他产品类型。

以下是示例代码(您需要根据自己的情况进行自定义):

add_action( 'woocommerce_cart_calculate_fees','custom_applied_fee', 10, 1 );
function custom_applied_fee( $cart_object ) {

    if ( is_admin() && ! defined( 'DOING_AJAX' ) )
        return;

    // Set HERE your categories (can be an ID, a slug or the name… or an array of this)
    $category1 = 'plain';
    $category2 = 'plywood';

    // variables initialisation
    $fee = 0;
    $coef = 1;

    // Iterating through each cart item
    foreach( $cart_object->get_cart() as $cart_item ){
        $product_id = version_compare( WC_VERSION, '3.0', '<' ) ? $cart_item['data']->id : $cart_item['data']->get_id();
        $product = $cart_item['data']; // Get the product object

        // Get the dimentions of the product
        $height = $product->get_height();
        $width = $product->get_width();
        // $length = $product->get_length();

        // Initialising variables (in the loop)
        $cat1 = false; $cat2 = false;

        // Detecting the product category and defining the category coeficient to change price (for example)
        // Set here for each category the modification calculation rules…
        if( has_term( $category1, 'product_cat', $cart_item['product_id']) )
            $coef = 1.15;
        if( has_term( $category2, 'product_cat', $cart_item['product_id']) )
            $coef = 1.3;

        // ## CALCULATIONS ## (Make here your conditional calculations)
        $dimention = $height * $with;
        if($dimention <= 10){
            $fee += 10 * $coef;
        } elseif($dimention > 10 && $dimention <= 20){
            $fee += 20 * $coef;
        } elseif($dimention > 20){
            $fee += 30 * $coef;
        }
    }

    // Set here the displayed fee text
    $fee_text = __( 'Packaging fee', 'woocommerce' );

    // Adding the fee
    if ( $fee > 0 )
        WC()->cart->add_fee( $fee_text, $fee, false );
        // Note: Last argument in add_fee() method is related to applying the tax or not to the discount (true or false)

}
  

您必须使用每个类别的相关更改计算设置自己的类别。考虑到购物车中的每件商品,您将获得非详细的一般产出费用。

代码进入活动子主题(或主题)的function.php文件。或者也可以在任何插件php文件中。

代码已经过测试并且功能齐全。

相关答案: