来自 ASP.NET 方面的 WP 新手。将 WP 3.8.1 与来自 woocommerce 的 USPS 和 FEDEX 扩展一起使用,我试图排除除 FEDEX 地面费率以外的所有易燃且无法通过航空运输的产品的结帐页面。我已经编写了一个函数并将其放在我的主题 functions.php 文件中。我不工作。也许我在 add_filter 中使用了错误的标签。
想出了这个。所以我为那些需要它的人编辑了我的原始代码。
产品 ID 是硬编码的,需要进一步开发。可用的方法字符串很困难,直到我认为我需要做一个 print_r 来公开它们。取消注释该行以公开它们。它们特定于 woocommerce USPS 和 FEDEX 扩展,可能没有记录。
// Hide USPS shipping methods when flammable items in cart
add_filter( 'woocommerce_available_shipping_methods', 'hide_usps_when_flammable_in_cart' , 1 );
/** Hide usps shipping when flammable items in cart
@param array $available_methods
*/
function hide_usps_when_flammable_in_cart( $available_methods ) {
// printing the methods so I know the available methods to exclude
// echo "<pre>" . print_r( $available_methods, true ) . "</pre>";
global $woocommerce;
// Get all products in cart
$products = $woocommerce->cart->get_cart();
//store product id's in array
$volitile = array(170,191,192,194,196,199,201,204,206,208,209,210,212,214,217,262);
// loop through the items looking for one in the ineligible array
foreach ( $products as $key => $item ) {
if( in_array( $item['product_id'], $volitile ) ) {
unset($available_methods['usps:flat_rate_box_priority']);
unset($available_methods['usps:flat_rate_box_express']);
unset($available_methods['usps:D_PRIORITY_MAIL']);
unset($available_methods['usps:D_STANDARD_POST']);
unset($available_methods['fedex:FEDEX_EXPRESS_SAVER']);
unset($available_methods['fedex:FEDEX_2_DAY_AM']);
unset($available_methods['fedex:FIRST_OVERNIGHT']);
unset($available_methods['fedex:PRIORITY_OVERNIGHT']);
unset($available_methods['fedex:FEDEX_2_DAY']);
unset($available_methods['fedex:STANDARD_OVERNIGHT']);
break;
}
}
return $available_methods;
}