如何在WooCommerce中仅对登录用户显示短描述上方的自定义字段
解决方案
问题1:将自定义字段显示在短描述上方
现有代码使用的woocommerce_before_add_to_cart_form钩子位置不符合需求,需要替换为woocommerce_single_product_summary钩子,并设置优先级为15(短描述的默认优先级是20,此设置可确保内容显示在短描述之前)。
问题2:仅对已登录用户可见
在字段显示函数中添加is_user_logged_in()判断,仅当用户处于登录状态时才输出内容。
修改后的完整代码
// 添加后台产品自定义字段 add_action( 'woocommerce_product_options_general_product_data', 'woo_add_custom_general_fields' ); function woo_add_custom_general_fields() { global $post; woocommerce_wp_text_input( array( 'id' => '_text_field', 'label' => __( '加价比例', 'woocommerce' ), 'placeholder' => '100.00%', 'desc_tip' => true, 'description' => __( '如果不填写百分比值,前端将不会显示此字段', 'woocommerce' ) ) ); } // 保存自定义字段值 add_action( 'woocommerce_process_product_meta', 'woo_add_custom_general_fields_save' ); function woo_add_custom_general_fields_save( $post_id ){ $woocommerce_text_field = $_POST['_text_field']; if( ! empty( $woocommerce_text_field ) ){ update_post_meta( $post_id, '_text_field', esc_attr( $woocommerce_text_field ) ); } else { // 清空未填写的字段值,避免数据库残留空数据 delete_post_meta( $post_id, '_text_field' ); } } // 在短描述上方显示自定义字段(仅登录用户可见) add_action('woocommerce_single_product_summary', 'magik_custom_text', 15); function magik_custom_text() { // 判断用户是否登录,未登录则直接返回 if ( !is_user_logged_in() ) { return; } global $post; $field_value = get_post_meta( $post->ID, '_text_field', true ); // 仅当字段有值时显示内容 if( ! empty( $field_value ) ){ echo '<p class="custom-markup">' . __('加价比例: ', 'woocommerce') . $field_value . '</p>'; } }
代码说明
- 后台字段部分:修正了原代码中描述文本的引号语法错误,调整提示文本为更清晰的表述(如需英文可自行改回原句)。
- 保存逻辑:新增未填写字段时的清空处理,避免数据库存储无效空值。
- 前端显示:
- 更换钩子确保内容出现在短描述上方;
- 通过登录状态判断控制内容可见性;
- 添加自定义CSS类
custom-markup,方便后续调整样式。
内容的提问来源于stack exchange,提问作者Nat
相关产品推荐
相关产品推荐

