如何在WordPress主题文件中编写apply_filter获取WooCommerce可变产品最低价
为可变产品最低价格添加自定义过滤器(apply_filter)
首先,你需要把直接获取的可变产品最低价格包装到apply_filters()中,这样就能创建一个可被其他代码修改的扩展钩子。下面是针对你现有代码的修改方案:
修改后的完整代码
add_filter('woocommerce_available_payment_gateways', 'conditional_payment_gateways', 10, 1); function conditional_payment_gateways( $available_gateways ) { foreach (WC()->cart->get_cart() as $cart_item_key => $cart_item ) { // 获取WC_Product对象 $product = wc_get_product($cart_item['product_id']); // 仅针对可变产品 if($product->is_type('variable')){ // 获取原始可变产品最低价格,并通过自定义过滤器开放修改 $original_min_price = $product->get_variation_price('min'); $variation_min_price = apply_filters( 'custom_variable_product_min_price', $original_min_price, $product ); // 若产品分类与可变产品最低价匹配 if( has_term( $variation_min_price, 'product_cat', $cart_item['product_id'] ) ){ // 货到付款(COD)支付网关 unset($available_gateways['cod']); // 移除COD网关 break; // 终止循环 } } } return $available_gateways; }
关键部分解释
自定义过滤器钩子的创建:
apply_filters( 'custom_variable_product_min_price', $original_min_price, $product )- 第一个参数是钩子名称(你可以自定义,建议加上专属前缀避免冲突),后续其他代码可以通过这个名称来添加过滤器逻辑。
- 第二个参数是待过滤的原始值,也就是默认的可变产品最低价格。
- 第三个参数是上下文数据,这里传入产品对象
$product,方便后续过滤函数获取产品的分类、ID等信息,实现更精准的价格调整。
如何使用这个过滤器(示例)
如果你需要在其他场景修改这个最低价格,比如给特定分类的产品最低价格打9折,可以添加以下代码:add_filter( 'custom_variable_product_min_price', 'adjust_variable_min_price', 10, 2 ); function adjust_variable_min_price( $min_price, $product ) { // 示例:如果产品属于"折扣专区"分类,价格打9折 if( has_term( 'discount-zone', 'product_cat', $product->get_id() ) ){ $min_price = $min_price * 0.9; } return $min_price; }
注意事项
- 钩子名称尽量唯一,比如加上你的主题/插件前缀,防止和其他代码的钩子重名导致冲突。
apply_filters()的参数顺序要和后续add_filter()的回调函数参数对应,比如这里先传价格再传产品,回调函数也要保持相同顺序。- 确保调用
apply_filters()前已经正确获取到原始最低价格,避免传递无效值影响后续逻辑。
内容的提问来源于stack exchange,提问作者Shanazz Rizvana
相关产品推荐
相关产品推荐

