要从WC_Product_Variable
对象获取 WooCommerce 中的最小变化有效价格:
$variation_min_price = $product->get_variation_price();
当购物车项目的最小变化价格与他的产品类别 ID 匹配时,您似乎在这里尝试取消设置“鳕鱼”支付网关。
使用 WordPress 条件函数has_term()
将真正简化您的代码(它接受任何分类的术语 ID、术语 slug 或术语名称(作为产品类别的“product_cat”)。
我想你的函数被woocommerce_available_payment_gateways
过滤器钩子钩住了……</p>
我对您的代码进行了一些更改,因为它有点过时并且有一些错误:
add_filter('woocommerce_available_payment_gateways', 'conditional_payment_gateways', 10, 1);
function conditional_payment_gateways( $available_gateways ) {
// Not in backend (admin)
if( is_admin() )
return $available_gateways;
foreach (WC()->cart->get_cart() as $cart_item_key => $cart_item ) {
// Get the WC_Product object
$product = wc_get_product($cart_item['product_id']);
// Only for variable products
if($product->is_type('variable')){
// Get the Variation "min" price
$variation_min_price = $product->get_variation_price();
// If the product category match with the variation 'min" price
if( has_term( $variation_min_price, 'product_cat', $cart_item['product_id'] ) ){
// Cash on delivery (cod) payment gateway
unset($available_gateways['cod']); // unset 'cod'
break; // stop the loop
}
}
}
return $available_gateways;
}
代码位于活动子主题(或主题)的 functions.php 文件中,也位于任何插件文件中。
这应该可以工作(但我无法真正测试它,因为它对产品类别 ID 和最小变化价格非常具体) ......</p>
可变产品类型的所有相关定价方法:
// All prices: multidimensional array with all variation prices (including active prices, regular prices and sale prices).
$prices = $product->get_variation_prices();
$prices_for_display = $product->get_variation_prices( true ); // For display
// The min or max active price.
$min_price = $product->get_variation_price(); // Min active price
$min_price_for_display = $product->get_variation_price('min', true); // Min active price for display
$max_price = $product->get_variation_price('max'); // Max active price
$max_price_for_display = $product->get_variation_price('max', true); // Max active price for display
// The min or max regular price.
$min_price = $product->get_variation_regular_price(); // Min regular price
$min_price_for_display = $product->get_variation_regular_price('min', true); // Min regular price for display
$max_price = $product->get_variation_regular_price('max'); // Max regular price
$max_price_for_display = $product->get_variation_regular_price('max', true); // Max regular price for display
// The min or max sale price.
$min_price = $product->get_variation_sale_price(); // Min sale price
$min_price_for_display = $product->get_variation_sale_price('min', true); // Min sale price for display
$max_price = $product->get_variation_sale_price('max'); // Max sale price
$max_price_for_display = $product->get_variation_sale_price('max', true); // Max sale price for display
相关答案:
如果达到购物车商品数量限制,则禁用 WooCommerce 付款方式