我正在try 获得与简单和可变产品的每个行项目相关联的发货类别,然后找出哪种产品的成本最高,并收取仅扣除其余发货成本的费用.这是给WooCommerce的.

我所做的是-

  1. 添加了两个分区
  2. 增加了两个装运类别
  3. 为方法中的两个类添加了价格
  4. 将"按类"设置为计算方法
  5. 在产品变体中设置发货类别

编辑:到目前为止添加的代码.

add_filter('woocommerce_package_rates', 'custom_shipping_method_by_class', 10, 2);

function custom_shipping_method_by_class($rates, $package)
{
    $class_costs = array();

    foreach ($package['contents'] as $item) {
        $product_id = $item['product_id'];
        $product = wc_get_product($product_id);

        if ($product instanceof WC_Product_Variable) {
            foreach ($product->get_visible_children() as $variation_id) {
                $term = wp_get_post_terms($variation_id, 'product_shipping_class');

                if (!empty($term)) {
                    $term = reset($term);
                    $class_costs[$term->term_id] = max($class_costs[$term->term_id] ?? 0, $rates["{$term->term_id}:$variation_id"]->cost);

                    var_dump($class_costs); // I get 0 here although I the variation has the shipping class set and the class has an amount set too.
                }
            }
        } else {
            $term = wp_get_post_terms($product_id, 'product_shipping_class');

            if (!empty($term)) {
                $term = reset($term);
                $class_costs[$term->term_id] = max($class_costs[$term->term_id] ?? 0, $rates["{$term->term_id}:$product_id"]->cost);
            }
        }
    }

    foreach ($rates as $rate_key => $rate) {
        list($class_id, $product_id) = explode(':', $rate_key);

        if (!array_key_exists($class_id, $class_costs) || $class_costs[$class_id] !== $rate->cost) {
            unset($rates[$rate_key]);
        }
    }

    return $rates;
}

推荐答案

您不需要任何代码,因 for each 统一费率上都有"计算类型"设置选项( Select 字段),您可以在"Per class: Charge shipping for each shipping class individually""Per order: Charge shipping for the most expensive shipping class"之间 Select :

enter image description here

请看Flat Rate shipping method WooCommerce documentation

Php相关问答推荐

p a/a/p的x路径 Select ,但不是p somethext a链接/a或某些文本/p>

当我们使用PHPUnit时,控制台中的--uses param到底起了什么作用以及如何使用?

编写WooCommerce多步骤签出

WooCommerce购物车中仅允许一个可下载产品

致命错误:无法使用简单的php博客重新声明spl_autoload_Register()

中继器内置中继器的ACF WordPress组

在WordPress中从CPT中删除插件

从两个日期创建日期范围,然后为范围中的每个日期复制子数组

CKEDITOR-如何在PHP中判断提交后的空数据

对表示大小的值后缀进行自定义排序(XXS、XS、S、M、L、XL、XXL)

无额外字段的Laravel同步

在php中计算两个没有假期的日期之间的小时差

调用未定义的方法 mysqli::execute_query()

VS Code 对 PHP 上从父类继承的方法报告误报

将产品数量、名称和结帐链接添加到 WooCommerce 添加到购物车消息

PHP 中的 libgd 无法读取 Apache 配置中的 SetEnv GDFONTPATH

如何在 PHP 中对具有相同数组值的值求和

用于检测此模式的正则表达式:something;something=something,something=something... 未知次数

Docker: unixodbc.h 没有这样的文件或目录.已安装 unixodbc-dev 时出现pecl install sqlsrv错误

如何将在同一台服务器上运行的 2 个 PHP 应用程序与使用公共会话分开