我在woocommerce中使用UPS扩展程序。我需要绕过UPS计算器免费送货。这样做的一个好方法是将项目标记为“virtuaL”,但该项目不需要运送。我需要为此商品发货。我已经能够自定义结帐页面并强制在虚拟物品上显示送货字段,但之后它们不会存储在实际订单中。
任何人都知道如何创建自定义功能或修改woocommerce文件以强制结帐流程要求在虚拟物品上运送,同时绕过UPS计算器? (其他项目需要计算运费)
答案 0 :(得分:1)
我遇到了同样的问题,插件的作者回答我说无法完成,必须编写代码才能完成。
答案 1 :(得分:0)
我刚遇到这个问题,也许这会帮助别人。对于我想要免费送货的所有产品,我制作了虚拟产品。
然后我去了Woocommerce> “运输选项”选项卡,选中“#34;即使不需要也可以收集送货地址”框。它位于"送货目的地部分"。
答案 2 :(得分:0)
我也需要这个,并且有一个可行的解决方案:
首先进入functions.php
中的"Appearance"->"Editor"->"Theme Functions"
,然后添加以下代码(我强烈建议首先使用" child theme"因此您不需要修改你的主题functions.php
......或者你也可以create a custom plugin)。
/* Puts items with "free-shipping" shipping class into a different shipping package. */
function free_woocommerce_cart_shipping_packages( $packages ) {
// Reset the packages
$packages = array();
// Free items
$freeshipping_items = array();
$regular_items = array();
// Sort free from regular (replace "free-shipping" below with the shipping class slug you actually use).
foreach( WC()->cart->get_cart() as $item ) {
if( $item['data']->needs_shipping() ) {
if( $item['data']->get_shipping_class() == 'free-shipping' ) {
$freeshipping_items[] = $item;
}
else {
$regular_items[] = $item;
}
}
}
// Put inside packages:
if( $freeshipping_items ) {
$packages[] = array(
'ship_via' => array( 'flat_rate' ),
'contents' => $freeshipping_items,
'contents_cost' => array_sum(wp_list_pluck($freeshipping_items, 'line_total')),
'applied_coupons' => WC()->cart->applied_coupons,
'destination' => array(
'country' => WC()->customer->get_shipping_country(),
'state' => WC()->customer->get_shipping_state(),
'postcode' => WC()->customer->get_shipping_postcode(),
'city' => WC()->customer->get_shipping_city(),
'address' => WC()->customer->get_shipping_address(),
'address_2' => WC()->customer->get_shipping_address_2()
)
);
}
if( $regular_items ) {
$packages[] = array(
// 'ship_via' => array( 'usps' ),
'contents' => $regular_items,
'contents_cost' => array_sum(wp_list_pluck($regular_items, 'line_total')),
'applied_coupons' => WC()->cart->applied_coupons,
'destination' => array(
'country' => WC()->customer->get_shipping_country(),
'state' => WC()->customer->get_shipping_state(),
'postcode' => WC()->customer->get_shipping_postcode(),
'city' => WC()->customer->get_shipping_city(),
'address' => WC()->customer->get_shipping_address(),
'address_2' => WC()->customer->get_shipping_address_2()
)
);
}
return $packages;
}
add_filter('woocommerce_cart_shipping_packages', 'free_woocommerce_cart_shipping_packages');
其次,进入"Products"->"Shipping Classes"
并创建一个名为" Free Shipping
"用一个名为" free-shipping
" (slug名称是我们将自定义函数绑定到的)。然后" Add New Shipping Class
"。
然后在"WooCommerce"->"Settings"->"Shipping"->"Flat Rate"
启用" Flat Rate
"运送,并在" Shipping Class Costs
"部分的值为" 0.00
"在" Free Shipping
"旁边我们刚创建的课程。在我的情况下,我也有" Calculation Type
"设置为" Per Class
"。然后" Save changes
"。
最后在&{34; "WooCommerce"->"Settings"->"Shipping"->"Shipping Options"
" Shipping Methods
中Flat Rate
部分,确保" Selection Priority
"有一个更高的" Save Changes
" (在该名称的列中)比您正在使用的任何其他运输方法,并且它是列表中的最后一个(您可以使用每个选项左侧的菜单图标拖动以重新排序)。 " Product Data"->"Shipping
"
然后编辑您希望免费送货的某件商品,转到" Free Shipping
"部分并将运输类更改为" Update
" (您创建的新课程)。然后" Shipping #1
"该产品保存更改。然后还将其添加到您的购物车中,并将其他商品添加到您的购物车中,该商品定期非免费送货。
<强>测试强>
您现在应该看到免费送货物品可以自己运送&#34;包裹&#34;行(&#34; Shipping #2
&#34;和&#34; {{1}}&#34;)与仍应收取运费的商品分开,即使您有各种类型的商品购物车。
或者,您也可以尝试使用名为&#34; Per Product Shipping&#34;的完整付费插件。
或者这个free plugin may work(没有承诺)。
答案 3 :(得分:0)
我认为另一种可以帮助你制作物品的方式是免费的#34;运费(以及我过去使用过的一种方式),就是创建一个优惠券来折扣产品(不要将其标记为&#34;虚拟&#34;)它的价格减去运费。
所以说例如你的产品是100美元,运费是10美元(总共110美元),然后你创建一个专门针对产品的优惠券,它将给你10美元的折扣,使你的产品和产品成为可能。运费总计100美元。
我假设你已经知道如何在woocommerce中创建优惠券(如果你需要一些令人耳目一新的方法{@ 3}}会有所帮助)。要使优惠券适用于您希望免费送货的特定产品,请转到使用限制 - &gt;产品并指定您想要的特定产品&#34;免费&#34; (或在这种情况下,打折)运费。
为了避免用户在结账时输入此优惠券代码,您可以将以下代码添加到functions.php中:
//Check for specific products then discount to adjust for 'free' shipping.
function my_free_shipping(){
//variables.
global $woocommerce;
$coupon_code = 'free-shiping';
$products= array('1', '2'); //products (ID's) to have discounted shipping.
//get the cart contents.
$cart_item = $woocommerce->cart->get_cart();
//loop through the cart items looking for the products in $products.
foreach ($cart_item as $key => $item){
//check if the cart items match to any of those in the array.
if(in_array($item['product_id'], $products)){
//apply discount.
$woocommerce->cart->add_discount(sanitize_text_field($coupon_code));
}
}
}
add_action('init', 'my_free_shipping');
请注意,我已经使用UPS扩展程序未测试此代码,但您可以随意修改并使用它。
我希望这篇文章对您有所帮助!