You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改WooCommerce代码以针对特定商品类别隐藏未登录用户的商品价格并限制购买

如何修改WooCommerce代码以针对特定商品类别隐藏未登录用户的商品价格并限制购买

没问题,我来帮你调整这段代码,让它只针对你指定的商品类别生效。核心思路是在原有「判断用户是否登录」的逻辑基础上,新增一个检查:当前商品是否属于你设定的目标类别,只有同时满足「用户未登录」和「商品属于目标类别」两个条件时,才执行隐藏价格、限制购买的操作。

修改后的完整代码

// 针对特定类别,给未登录用户隐藏商品价格
add_action('after_setup_theme','magik_activate_filter') ;

function magik_activate_filter() {
    add_filter('woocommerce_get_price_html', 'magik_show_price_logged');
}

function magik_show_price_logged($price) {
    // 定义你要针对的商品类别(用类别slug,多个类别就往数组里加)
    $target_categories = array('electronics', 'furniture');
    
    // 获取当前商品对象,防止无商品场景报错
    global $product;
    if ( ! $product ) {
        return $price;
    }
    
    // 逻辑判断:已登录 或 商品不在目标类别 → 返回原价格
    if( is_user_logged_in() || ! has_term( $target_categories, 'product_cat', $product->get_id() ) ) {
        return $price;
    } else {
        // 未登录且商品在目标类别 → 隐藏价格,显示登录链接
        remove_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_price', 10 );
        remove_action( 'woocommerce_after_shop_loop_item_title', 'woocommerce_template_loop_price', 10 );
        return '<a href="' . get_permalink(woocommerce_get_page_id('myaccount')) . '">Login to order</a>';
    }
}

// Option Two:限制特定类别商品对未登录用户的购买权限(不需要的话可以删掉这部分)
add_filter('woocommerce_is_purchasable', 'my_woocommerce_is_purchasable', 10, 2);

function my_woocommerce_is_purchasable($is_purchasable, $product) {
    // 和上面保持一致的目标类别定义
    $target_categories = array('electronics', 'furniture');
    
    // 逻辑判断:已登录 或 商品不在目标类别 → 允许购买
    if( is_user_logged_in() || ! has_term( $target_categories, 'product_cat', $product->get_id() ) ) {
        return true;
    }
    // 未登录且商品在目标类别 → 禁止购买
    return false;
}

关键修改说明

  1. 自定义目标类别:你需要把代码里$target_categories数组中的'electronics'、'furniture'换成你实际需要的商品类别slug(可以在WordPress后台「商品 → 商品类别」里查看每个类别的slug),多个类别直接在数组里追加即可。
  2. 商品类别检查:用has_term()函数判断当前商品是否属于目标类别,这个函数的参数分别是「类别/类别数组」、「WooCommerce商品类别的分类法名称product_cat」、「商品ID」。
  3. 逻辑优化:把原来「只要未登录就隐藏价格」的逻辑,改成「未登录且商品在目标类别中才执行隐藏/限制」,这样其他类别的商品对未登录用户依然正常显示价格和购买权限。

注意事项

  • 如果你只需要隐藏价格不需要限制购买,直接删掉Option Two的代码即可;反之同理。
  • 建议把代码添加到主题的functions.php文件末尾,或者用自定义代码插件(比如Code Snippets)来管理,避免主题更新导致代码丢失。

备注:内容来源于stack exchange,提问作者Farrukh Nasir

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.21 09:04:52