如何为未登录用户隐藏WooCommerce Barn2商品表的促销价格列
问题原因
你使用的woocommerce_product_get_sale_price过滤器仅适用于WooCommerce原生调用价格的场景,Barn2 WooCommerce Product Table的自定义字段列默认直接读取数据库存储的_sale_price元字段,不会触发该钩子,因此代码不生效。
解决方案
根据你的需求可选择以下任意一种实现:
方案1:未登录用户完全隐藏“SALE PRICE”列
使用Barn2官方提供的表格列过滤器wc_product_table_columns实现,代码如下:
add_filter( 'wc_product_table_columns', function( $columns ) { // 请将代码中的sale_price替换为你自定义SALE PRICE列的实际键名 if ( ! is_user_logged_in() && isset( $columns['sale_price'] ) ) { unset( $columns['sale_price'] ); } return $columns; } );
注:自定义列的键名可在后台产品表配置的自定义列设置项中查询。
方案2:保留列结构,未登录用户仅隐藏列内价格内容
使用自定义列内容输出过滤器wc_product_table_custom_column_value实现,代码如下:
add_filter( 'wc_product_table_custom_column_value', function( $value, $column, $product ) { // 请将代码中的sale_price替换为你自定义SALE PRICE列的实际键名 if ( $column === 'sale_price' && ! is_user_logged_in() ) { // 可返回空,也可填写自定义提示文本如“登录后查看价格” return ''; } return $value; }, 10, 3 );
以上代码添加到当前主题的functions.php文件或自定义代码片段插件中即可生效。
内容的提问来源于stack exchange,提问作者Minhas
相关产品推荐
相关产品推荐

