我使用了一个表格运费插件来设置 4 个运输区域,每个区域都有标准和次日交付选项。
商店中的每件商品都在 10-15 天内有货,但一些产品有库存,可在第二天发货。如果购物车中的任何产品没有库存,则应该只有标准运输选项可用。
我相当确定我需要使用“woocommerce_available_shipping_methods”过滤器,如此处类似的问题/答案所示:隐藏运输选项 Woocommerce,但是对于如何检查每个购物车项目的库存水平,我完全一无所知。
任何指针将不胜感激。
我使用了一个表格运费插件来设置 4 个运输区域,每个区域都有标准和次日交付选项。
商店中的每件商品都在 10-15 天内有货,但一些产品有库存,可在第二天发货。如果购物车中的任何产品没有库存,则应该只有标准运输选项可用。
我相当确定我需要使用“woocommerce_available_shipping_methods”过滤器,如此处类似的问题/答案所示:隐藏运输选项 Woocommerce,但是对于如何检查每个购物车项目的库存水平,我完全一无所知。
任何指针将不胜感激。
我现在已经解决了这个问题。我的解决方案绝对不适合所有人,但它可能会帮助某人。
我正在为 woocommerce 使用此表运费插件:http ://codecanyon.net/item/table-rate-shipping-for-woocommerce/3796656?WT (如果您想复制这种工作方式)
我很感激这个问题的答案:隐藏运输选项 Woocommerce
该代码基本上是从中复制的,但设置为检查产品的库存数量。
此代码不考虑是否允许延期交货,它实际上检查库存数量是否 > 0 并且购物车数量 <= 库存数量。基本上,如果产品存在于仓库中,则可以在结帐时提供次日发货,如果没有,则将其删除,并且仅提供标准发货。
/* !Hide Shipping Options Woocommerce */
add_filter( 'woocommerce_available_shipping_methods', 'hide_shipping_based_on_quantity' , 10, 1 );
function check_cart_for_oos() {
// load the contents of the cart into an array.
global $woocommerce;
$found = false;
foreach ( $woocommerce->cart->get_cart() as $cart_item_key => $values ) {
$_product = $values['data'];
$_product_quantity = $_product->get_stock_quantity();
$_cart_quantity = $values['quantity'];
if (($_product_quantity <= 0) || ($_cart_quantity > $_product_quantity)) {
$found = true;
break;
}
}
return $found;
}
function hide_shipping_based_on_quantity( $available_methods ) {
// use the function check_cart_for_oos() to check the cart for products with 0 stock.
if ( check_cart_for_oos() ) {
// remove the rate you want
unset( $available_methods['table_rate_shipping_next-day'] ); // Replace "table_rate_shipping_next-day" with "table_rate_shipping_your-identifier".
}
// return the available methods without the one you unset.
return $available_methods;
}