WordPress(PHP): 价格为空/零时替换Add to Cart按钮文字失败求助
问题分析与修复方案
你的代码不生效核心原因是价格判断逻辑存在偏差:$product->get_price()返回的是数值类型(如0)而非字符串"0.00",同时空值判断的严谨性不足。以下是修正后的可运行代码:
function filter_woocommerce_product_add_to_cart_text( $add_to_cart_text, $product ) { // 将产品价格转为浮点型,统一判断标准 $product_price = (float) $product->get_price(); // 判断价格为空或等于0时替换按钮文字 if ( empty( $product_price ) || $product_price === 0.00 ) { $add_to_cart_text = __( 'Request for quote', 'woocommerce' ); } return $add_to_cart_text; } add_filter( 'woocommerce_product_add_to_cart_text', 'filter_woocommerce_product_add_to_cart_text', 10, 2 ); add_filter( 'woocommerce_product_single_add_to_cart_text', 'filter_woocommerce_product_add_to_cart_text', 10, 2 );
关键修正说明
- 把价格转为
float类型,避免字符串与数值比较不匹配的问题 - 用严格相等判断
=== 0.00,确保数值判断的准确性 - 优化空值判断逻辑,直接针对转换后的数值进行校验
可变产品适配(可选)
如果店铺包含可变产品(Variable Product),需要额外处理变体价格的判断,可添加以下代码:
function filter_variation_add_to_cart_text( $add_to_cart_text, $product ) { if ( $product->is_type('variation') ) { $variation_price = (float) $product->get_price(); if ( empty( $variation_price ) || $variation_price === 0.00 ) { $add_to_cart_text = __( 'Request for quote', 'woocommerce' ); } } return $add_to_cart_text; } add_filter( 'woocommerce_product_add_to_cart_text', 'filter_variation_add_to_cart_text', 20, 2 );
设置优先级20是为了确保该函数在之前的通用函数之后执行,覆盖变体产品的按钮文字。
内容的提问来源于stack exchange,提问作者elissa
相关产品推荐
相关产品推荐

