WooCommerce未登录隐藏价格并显示按钮问题
修复WooCommerce未登录用户无法隐藏可变商品变体价格的问题
你当前的代码仅处理了简单商品和基础可变商品的价格隐藏,但可变商品的变体价格区间、选择属性后显示的单个变体价格这两个关键输出点未被覆盖,导致带多价格变体的商品仍然会显示价格。
修复后的完整代码
add_action( 'init', 'nascondi_prezzo_se_non_loggato' ); function nascondi_prezzo_se_non_loggato() { if ( ! is_user_logged_in() ) { // 移除商品列表页的添加购物车按钮和价格 remove_action( 'woocommerce_after_shop_loop_item', 'woocommerce_template_loop_add_to_cart', 10 ); remove_action( 'woocommerce_after_shop_loop_item_title', 'woocommerce_template_loop_price', 10 ); // 移除商品详情页的基础价格和添加购物车按钮 remove_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_price', 10 ); remove_action( 'woocommerce_single_variation', 'woocommerce_single_variation_add_to_cart_button', 20 ); // 新增:移除变体选择后显示的单个变体价格 remove_action( 'woocommerce_single_variation', 'woocommerce_single_variation_price', 10 ); // 禁用商品可购买状态 add_filter( 'woocommerce_is_purchasable', '__return_false' ); // 替换为登录提示文本 add_action( 'woocommerce_single_product_summary', 'mostra_testo_alternativo', 31 ); add_action( 'woocommerce_after_shop_loop_item', 'mostra_testo_alternativo', 11 ); // 新增:过滤可变商品的价格区间和单个变体价格HTML add_filter( 'woocommerce_variable_price_html', 'nascondi_prezzo_variabile', 10, 2 ); add_filter( 'woocommerce_variation_price_html', 'nascondi_prezzo_variabile', 10, 2 ); } } function mostra_testo_alternativo() { // 生成动态登录链接,登录后自动返回当前商品页 echo '<a href="' . esc_url( wp_login_url( get_permalink() ) ) . '"><div class="button-prezzo">' . __( 'Accedi per vedere i prezzi', 'JupiterX' ) . '</div></a>'; } // 隐藏可变商品的价格区间和变体价格 function nascondi_prezzo_variabile( $price_html, $product ) { return ''; // 直接清空价格HTML,如需替换提示文本可修改此处 }
关键改动说明
- 新增
remove_action('woocommerce_single_variation', 'woocommerce_single_variation_price', 10):移除用户选择变体属性后页面实时显示的单个变体价格。 - 新增两个过滤钩子
woocommerce_variable_price_html和woocommerce_variation_price_html:分别处理可变商品的价格区间(如“¥100-¥200”)和单个变体的价格HTML输出,直接清空或替换为自定义内容。 - 优化登录链接:使用
wp_login_url()生成动态链接,自动附带当前商品页跳转参数,提升用户体验。
内容的提问来源于stack exchange,提问作者Giovanni
相关产品推荐
相关产品推荐

