如何在WooCommerce账户详情页展示用户注册自定义字段
具体实现步骤
你可以通过两个钩子完成自定义字段在账户详情页的展示和可编辑保存,所有代码均放在你当前使用的子主题functions.php文件中即可。
1. 向账户详情页插入自定义字段
使用woocommerce_edit_account_form动作钩子加载字段,同时读取已保存的用户元数据作为默认值:
add_action( 'woocommerce_edit_account_form', 'add_custom_fields_to_account_page' ); function add_custom_fields_to_account_page() { $user_id = get_current_user_id(); if ( !$user_id ) return; // 读取已保存的用户数据 $customer_dob = get_user_meta( $user_id, 'customer_dob', true ); $reg_mkt_email = get_user_meta( $user_id, 'reg_mkt_email', true ); $reg_mkt_number = get_user_meta( $user_id, 'reg_mkt_number', true ); // 账单姓、名、手机号、邮箱WooCommerce默认账户详情页已自带,可不用重复添加,需要加的话同理取对应meta值即可 ?> <p class="form-row form-row-wide"> <label for="reg_customer_dob"><?php _e( '出生日期', 'woocommerce' ); ?><span class="required">*</span></label> <input type="text" class="input-text" name="reg_customer_dob" id="reg_customer_dob" value="<?php echo esc_attr($customer_dob); ?>" /> </p> <p class="form-row form-row-wide"> <input type="checkbox" name="reg_mkt_email" id="reg_mkt_email" <?php checked($reg_mkt_email, 'on'); ?> /> <label for="reg_mkt_email">同意接收营销邮件</label> </p> <p class="form-row form-row-wide"> <input type="checkbox" name="reg_mkt_number" id="reg_mkt_number" <?php checked($reg_mkt_number, 'on'); ?> /> <label for="reg_mkt_number">同意接收营销短信</label> </p> <div class="clear"></div> <?php }
注:注册时的密码确认、邮箱确认字段不需要添加到账户详情页,WooCommerce账户页本身已包含密码修改、邮箱修改的对应校验逻辑。
2. 保存账户详情页修改的自定义字段
使用woocommerce_save_account_details动作钩子处理保存逻辑:
add_action( 'woocommerce_save_account_details', 'save_custom_fields_from_account_page' ); function save_custom_fields_from_account_page( $user_id ) { // 保存出生日期 if ( isset( $_POST['reg_customer_dob'] ) ) { update_user_meta( $user_id, 'customer_dob', sanitize_text_field( $_POST['reg_customer_dob'] ) ); } // 保存营销邮件复选框 $mkt_email_val = isset($_POST['reg_mkt_email']) ? 'on' : ''; update_user_meta( $user_id, 'reg_mkt_email', $mkt_email_val ); // 保存营销短信复选框 $mkt_number_val = isset($_POST['reg_mkt_number']) ? 'on' : ''; update_user_meta( $user_id, 'reg_mkt_number', $mkt_number_val ); // 其余自定义字段按以上逻辑补充即可 }
内容的提问来源于stack exchange,提问作者Siddharth
相关产品推荐
相关产品推荐

