gpt4 book ai didi

php - 根据 WooCommerce 中的属性值计数更改统一运费

转载 作者:行者123 更新时间:2023-12-04 03:10:33 24 4
gpt4 key购买 nike

我正在尝试在不使用插件的情况下指定 2 种不同的统一运费方式的运费:

  • 如果购物车中只有一个供应商的产品,则统一运费需要为 19 英镑。
  • 如果购物车中有多个来自多个供应商的产品,则统一运费需要为 39 英镑。

  • 我尝试了各种插件,但它们侧重于基于尺寸、重量、数量、位置、类别的运费,而不是属性或条款。

    我有一个名为 的属性供应商 有 8 个术语。每个术语都是不同的供应商/供应商。

    这是我想要实现的 PHP 逻辑类型:
    if product attribute term quantity = 1

    then flat rate = £19

    else

    if product attribute term quantity > 1

    then flat rate = £39

    当购物车中有多个属性供应商条款时,如何更改此“统一费率”运输方式成本?

    最佳答案

    这个过程需要两个步骤:一些代码和一些设置……

    1) 代码 - 您可以使用卡在 woocommerce_package_rates 中的自定义函数过滤器钩子(Hook),当购物车元素来自超过 1 个供应商时,针对“统一费率”运输方式:

    add_filter( 'woocommerce_package_rates', 'custom_flat_rate_cost_calculation', 10, 2 );
    function custom_flat_rate_cost_calculation( $rates, $package )
    {

    // SET BELOW your attribute slug… always begins by "pa_"
    $attribute_slug = 'pa_vendor'; // (like for "Color" attribute the slug is "pa_color")


    // Iterating through each cart item to get the number of different vendors
    foreach ( WC()->cart->get_cart() as $cart_item_key => $cart_item ) {

    // The attribute value for the current cart item
    $attr_value = $cart_item[ 'data' ]->get_attribute( $attribute_slug );

    // We store the values in an array: Each different value will be stored only one time
    $attribute_values[ $attr_value ] = $attr_value;
    }
    // We count the "different" attribute values stored
    $count = count($attribute_values);

    // Iterating through each shipping rate
    foreach($rates as $rate_key => $rate_values){
    $method_id = $rate_values->method_id;
    $rate_id = $rate_values->id;

    // Targeting "Flat Rate" shipping method
    if ( 'flat_rate' === $method_id ) {
    // For more than 1 vendor (count)
    if( $count > 1 ){
    // Get the original rate cost
    $orig_cost = $rates[$rate_id]->cost;
    // Calculate the new rate cost
    $new_cost = $orig_cost + 20; // 19 + 20 = 39
    // Set the new rate cost
    $rates[$rate_id]->cost = $new_cost;
    // Calculate the conversion rate (for below taxes)
    $conversion_rate = $new_cost / $orig_cost;
    // Taxes rate cost (if enabled)
    foreach ($rates[$rate_id]->taxes as $key => $tax){
    if( $rates[$rate_id]->taxes[$key] > 0 ){
    $new_tax_cost = number_format( $rates[$rate_id]->taxes[$key]*$conversion_rate, 2 );
    $rates[$rate_id]->taxes[$key] = $new_tax_cost; // set the cost
    }
    }
    }
    }
    }
    return $rates;
    }

    代码在您的事件子主题(或主题)的 function.php 文件中或任何插件文件中。

    此代码已使用 woocommerce 版本 3+ 进行测试并且可以正常工作

    2) 设置 - 将上述代码保存在您的事件主题的 function.php 文件中后,您需要将(对于所有运输区域)“统一费率”运输方式成本设置为 19 (19 英镑)(并节省)。

    IMPORTANT: To refresh Shipping method caches you will need to disable "flat rate" then save, and enable back "flat rate" then save.



    现在这应该按预期为您工作。

    关于php - 根据 WooCommerce 中的属性值计数更改统一运费,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45658980/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com