如何在WooCommerce编辑账户页面保存user_description字段
解决WooCommerce编辑账户页面无法保存user_description的问题
你无法保存user_description的核心原因是:user_description对应的是WordPress用户表(wp_users)中的description字段,而非用户元数据(存储在wp_usermeta),所以不能用update_user_meta()来更新,必须使用wp_update_user()函数处理。
修改后的保存函数代码
在你的misha_save_account_details函数中添加处理用户简介的逻辑即可:
// ================= SAVE ACCOUNT FIELDS / START ==================== // add_action( 'woocommerce_save_account_details', 'misha_save_account_details' ); function misha_save_account_details( $user_id ) { if( isset( $_POST[ 'billing_phone' ] ) ){ update_user_meta( $user_id, 'billing_phone', wc_clean( $_POST[ 'billing_phone' ] ) ); } // 新增:保存用户简介 if ( isset( $_POST['user_description'] ) ) { $user_data = array( 'ID' => $user_id, 'description' => wc_clean( $_POST['user_description'] ) ); wp_update_user( $user_data ); } if ( isset( $_FILES['image'] ) ) { require_once( ABSPATH . 'wp-admin/includes/image.php' ); require_once( ABSPATH . 'wp-admin/includes/file.php' ); require_once( ABSPATH . 'wp-admin/includes/media.php' ); $attachment_id = media_handle_upload( 'image', 0 ); if ( is_wp_error( $attachment_id ) ) { // 修正:错误提示中显示文件名而非数组 update_user_meta( $user_id, 'image', $_FILES['image']['name'] . ": " . $attachment_id->get_error_message()[0] ); } else { update_user_meta( $user_id, 'image', $attachment_id ); } } } // ================= SAVE ACCOUNT FIELDS / END ==================== //
补充说明
关于字段默认不显示的原因:WooCommerce的
/my-account/edit-account/页面默认只聚焦于核心账户信息(用户名、邮箱、密码)的编辑,用户简介属于WordPress原生用户字段,不在WooCommerce默认的编辑表单范围内,所以需要你手动通过woocommerce_edit_account_form钩子添加。可选优化:你可以用WooCommerce统一的
woocommerce_form_field函数生成简介字段,保持表单风格一致,示例代码如下:
// 替换你原来的textarea代码 woocommerce_form_field( 'user_description', array( 'type' => 'textarea', 'rows' => 8, 'label' => esc_html__( 'Bio', 'woocommerce' ), 'class' => array('form-row-wide') ), get_the_author_meta( 'user_description', $user_id ) );
内容的提问来源于stack exchange,提问作者Muhammad Usama Ali
相关产品推荐
相关产品推荐

