在不使用区域或统一费率的情况下向 Woocommerce Shipping Class 添加费用
Add fee to Woocommerce Shipping Class without the use of zones or flat rate
我很难找到我需要的东西,所以我求助于这里的专家!
我正在为我们简单的非营利漫画书店使用 Woocommerce 和一个名为 Table Rate Shipping Plus(来自 mangohour)的插件。我们在瑞典使用基于重量的运输作为标准,因此统一费率系统不适合我们的商店。
我创建了一个 'bulky' 运费 class,我需要它在选择 class 中的产品后自动向购物车添加少量费用(仅一次,不堆叠)不使用 woocommerce 的运输区和统一费率系统。
我似乎无法在任何地方找到任何可以执行此简单操作的东西,而且我 php 还不够精明,无法自己为 functions.php 编写函数或过滤器。
有人能指出我正确的方向吗?我盯着自己看瞎了...
如果我把这段代码给你放在 functions.php 中,你会明白如何定制它吗?或者我应该把它变成一个简单的插件吗?
这是它在我的本地 WP 测试环境中工作的视觉效果。
正在安装到 functions.php
向下滚动到实际代码开始的位置,复制并粘贴整个块,就在主题文件夹的最底部 functions.php。只是一个简单的复制和粘贴。
使用说明
第 1 步。在 WooComerce 设置 > 运输 > 运输 类 中创建运输 classes。例如,在我的测试站点上,我在 wooComerce 设置中创建了 'bulky' 和 'light' 运输 classes。记住您为步骤 2 设置的 slug。
第 2 步。在 EX1
处,我将 WooCommerce 运输 class 的区分大小写的 slug 包裹在 '' 中。
在 EX2
,我将您希望在结账时显示的费用描述放在“”内。最后,在 EX3
处,您只需放置费用的数值,这不在 '' 内。
//Example:
$shippingClasses['EX1'] = ['description' => 'EX2', 'fee' => EX3];
//How it will look:
$shippingClasses['bulky'] = ['description' => 'Bulky Fee', 'fee' => 7];
$shippingClasses['light'] = ['description' => 'Light Fee', 'fee' => 4];
就是这样!这就是你所要做的。
代码
function fees_fees_fees() {
$shippingClasses['bulky'] = ['description' => 'Bulky Fee', 'fee' => 5];
$shippingClasses['light'] = ['description' => 'Light Fee', 'fee' => 7];
foreach ( WC()->cart->get_cart() as $cart_item_key => $values ) {
$shipping_class = get_the_terms( $values['product_id'], 'product_shipping_class' );
foreach($shippingClasses as $key => $val) {
if ( isset( $shipping_class[0]->slug ) && in_array( $shipping_class[0]->slug, [$key] ) ) {
WC()->cart->add_fee( __($val['description'], 'woocommerce'), $val['fee'] ); }
}
}
}
add_action( 'woocommerce_cart_calculate_fees', 'fees_fees_fees' );
我很难找到我需要的东西,所以我求助于这里的专家!
我正在为我们简单的非营利漫画书店使用 Woocommerce 和一个名为 Table Rate Shipping Plus(来自 mangohour)的插件。我们在瑞典使用基于重量的运输作为标准,因此统一费率系统不适合我们的商店。
我创建了一个 'bulky' 运费 class,我需要它在选择 class 中的产品后自动向购物车添加少量费用(仅一次,不堆叠)不使用 woocommerce 的运输区和统一费率系统。
我似乎无法在任何地方找到任何可以执行此简单操作的东西,而且我 php 还不够精明,无法自己为 functions.php 编写函数或过滤器。
有人能指出我正确的方向吗?我盯着自己看瞎了...
如果我把这段代码给你放在 functions.php 中,你会明白如何定制它吗?或者我应该把它变成一个简单的插件吗?
这是它在我的本地 WP 测试环境中工作的视觉效果。
正在安装到 functions.php
向下滚动到实际代码开始的位置,复制并粘贴整个块,就在主题文件夹的最底部 functions.php。只是一个简单的复制和粘贴。
使用说明
第 1 步。在 WooComerce 设置 > 运输 > 运输 类 中创建运输 classes。例如,在我的测试站点上,我在 wooComerce 设置中创建了 'bulky' 和 'light' 运输 classes。记住您为步骤 2 设置的 slug。
第 2 步。在 EX1
处,我将 WooCommerce 运输 class 的区分大小写的 slug 包裹在 '' 中。
在 EX2
,我将您希望在结账时显示的费用描述放在“”内。最后,在 EX3
处,您只需放置费用的数值,这不在 '' 内。
//Example:
$shippingClasses['EX1'] = ['description' => 'EX2', 'fee' => EX3];
//How it will look:
$shippingClasses['bulky'] = ['description' => 'Bulky Fee', 'fee' => 7];
$shippingClasses['light'] = ['description' => 'Light Fee', 'fee' => 4];
就是这样!这就是你所要做的。
代码
function fees_fees_fees() {
$shippingClasses['bulky'] = ['description' => 'Bulky Fee', 'fee' => 5];
$shippingClasses['light'] = ['description' => 'Light Fee', 'fee' => 7];
foreach ( WC()->cart->get_cart() as $cart_item_key => $values ) {
$shipping_class = get_the_terms( $values['product_id'], 'product_shipping_class' );
foreach($shippingClasses as $key => $val) {
if ( isset( $shipping_class[0]->slug ) && in_array( $shipping_class[0]->slug, [$key] ) ) {
WC()->cart->add_fee( __($val['description'], 'woocommerce'), $val['fee'] ); }
}
}
}
add_action( 'woocommerce_cart_calculate_fees', 'fees_fees_fees' );