如何限制WooCommerce自定义价格替换代码仅作用于前端?
限制WooCommerce价格替换代码仅作用于前端
要让你的代码只在前端生效、不影响后台商品列表,只需在两个自定义函数开头添加后台环境判断逻辑即可——借助WordPress的is_admin()函数识别后台场景,一旦处于后台就直接返回原始内容,跳过价格替换逻辑。
修改后的完整代码如下:
// Variable and simple product displayed prices add_filter( 'woocommerce_get_price_html', 'empty_and_zero_price_html', 20, 2 ); function empty_and_zero_price_html( $price, $product ) { // 后台直接返回原价格 if (is_admin()) return $price; $empty_price = __('Enquire', 'woocommerce'); if( $product->is_type('variable') ) { $prices = $product->get_variation_prices( true ); if ( empty( $prices['price'] ) ) { return $empty_price; } else { $min_price = current( $prices['price'] ); $max_price = end( $prices['price'] ); if ( $min_price === $max_price && 0 == $min_price ) { return $empty_price; } elseif ( $min_price !== $max_price && 0 == $min_price ) { return wc_price( $max_price ); } } } elseif( $product->is_type('simple') ) { if ( '' === $product->get_price() || 0 == $product->get_price() ) { return $empty_price; } } return $price; } // Product Variation displayed prices add_filter( 'woocommerce_available_variation', 'empty_and_zero_variation_prices_html', 10, 3); function empty_and_zero_variation_prices_html( $data, $product, $variation ) { // 后台直接返回原数据 if (is_admin()) return $data; if( '' === $variation->get_price() || 0 == $variation->get_price() ) $data['price_html'] = __('Enquire', 'woocommerce'); return $data; }
说明
is_admin()函数会检测当前是否处于WordPress后台(包括商品列表、商品编辑页等所有后台场景),当检测为后台时,函数直接返回原始的价格或变体数据,不执行后续的替换逻辑,以此确保只有前端页面会显示自定义的"Enquire"文本。
内容的提问来源于stack exchange,提问作者Nikolai
相关产品推荐
相关产品推荐

