如何更改在编辑帐户模板表单中添加的 phone 值?
How to change the added phone value in edit-account template form?
我需要将字段 'firstname'、'lastname' 和 'phone' 添加到注册 woocommerce 表单。
我找到了那个决定。
function wooc_extra_register_fields() {?>
<div class="woocommerce-form-row woocommerce-form-row--wide form-row form-row-wide form-group">
<input type="text" name="billing_first_name" id="reg_billing_first_name" value="<?php if ( ! empty( $_POST['billing_first_name'] ) ) esc_attr_e( $_POST['billing_first_name'] ); ?>" class="woocommerce-Input woocommerce-Input--text input-text form-control" size="25" placeholder="<?php _e( 'First Name', 'mydomain' ) ?>" />
</div>
<div class="woocommerce-form-row woocommerce-form-row--wide form-row form-row-wide form-group">
<input type="text" name="billing_last_name" id="reg_billing_last_name" value="<?php if ( ! empty( $_POST['billing_last_name'] ) ) esc_attr_e( $_POST['billing_last_name'] ); ?>" placeholder="<?php _e( 'Last Name', 'mydomain' ) ?>" class="woocommerce-Input woocommerce-Input--text input-text form-control" size="25" />
</div>
<div class="woocommerce-form-row woocommerce-form-row--wide form-row form-row-wide form-group">
<input type="text" name="billing_phone" id="reg_billing_phone" placeholder="<?php _e( 'Phone', 'woocommerce' ); ?>" value="<?php esc_attr_e( $_POST['billing_phone'] ); ?>" class="woocommerce-Input woocommerce-Input--text input-text form-control" size="25" />
</div>
<?php
}
add_action( 'woocommerce_register_form_start', 'wooc_extra_register_fields' );
/**
* register fields Validating.
*/
function wooc_validate_extra_register_fields( $username, $email, $validation_errors ) {
if ( isset( $_POST['billing_first_name'] ) && empty( $_POST['billing_first_name'] ) ) {
$validation_errors->add( 'billing_first_name_error', __( '<strong>Error</strong>: First name is required!', 'woocommerce' ) );
}
if ( isset( $_POST['billing_last_name'] ) && empty( $_POST['billing_last_name'] ) ) {
$validation_errors->add( 'billing_last_name_error', __( '<strong>Error</strong>: Last name is required!.', 'woocommerce' ) );
}
if ( isset( $_POST['billing_phone'] ) && empty( $_POST['billing_phone'] ) ) {
$validation_errors->add( 'billing_phone_error', __( '<strong>Error</strong>: Phone is required!.', 'woocommerce' ) );
}
return $validation_errors;
}
add_action( 'woocommerce_register_post', 'wooc_validate_extra_register_fields', 10, 3 );
/**
* Below code save extra fields.
*/
function wooc_save_extra_register_fields( $customer_id ) {
if ( isset( $_POST['billing_phone'] ) ) {
// Phone input filed which is used in WooCommerce
update_user_meta( $customer_id, 'billing_phone', sanitize_text_field( $_POST['billing_phone'] ) );
}
if ( isset( $_POST['billing_first_name'] ) ) {
//First name field which is by default
update_user_meta( $customer_id, 'first_name', sanitize_text_field( $_POST['billing_first_name'] ) );
// First name field which is used in WooCommerce
update_user_meta( $customer_id, 'billing_first_name', sanitize_text_field( $_POST['billing_first_name'] ) );
}
if ( isset( $_POST['billing_last_name'] ) ) {
// Last name field which is by default
update_user_meta( $customer_id, 'last_name', sanitize_text_field( $_POST['billing_last_name'] ) );
// Last name field which is used in WooCommerce
update_user_meta( $customer_id, 'billing_last_name', sanitize_text_field( $_POST['billing_last_name'] ) ); }
}
add_action( 'woocommerce_created_customer', 'wooc_save_extra_register_fields' );
在我的帐户表单-编辑-account.php 模板中看起来像这样
<form class="woocommerce-EditAccountForm edit-account" action="" method="post" <?php do_action( 'woocommerce_edit_account_form_tag' ); ?> >
<?php do_action( 'woocommerce_edit_account_form_start' ); ?>
<p class="woocommerce-form-row woocommerce-form-row--first form-row form-row-first page-inside-p">
<input type="text" class="woocommerce-Input woocommerce-Input--text input-text form-control" name="account_first_name" id="account_first_name" autocomplete="given-name" value="<?php echo esc_attr( $user->first_name ); ?>" placeholder="<?php esc_html_e( 'First name', 'woocommerce' ); ?>" />
</p>
<p class="woocommerce-form-row woocommerce-form-row--last form-row form-row-last page-inside-p">
<input type="text" class="woocommerce-Input woocommerce-Input--text input-text form-control" name="account_last_name" id="account_last_name" autocomplete="family-name" value="<?php echo esc_attr( $user->last_name ); ?>" placeholder="<?php esc_html_e( 'Last name', 'woocommerce' ); ?>" />
</p>
<div class="clear"></div>
<p class="woocommerce-form-row woocommerce-form-row--wide form-row form-row-wide page-inside-p">
<input type="text" class="woocommerce-Input woocommerce-Input--text input-text form-control" name="account_display_name" id="account_display_name" value="<?php echo esc_attr( $user->display_name ); ?>" placeholder="<?php esc_html_e( 'Display name', 'woocommerce' ); ?>" />
</p>
<div class="clear"></div>
<p class="woocommerce-form-row woocommerce-form-row--wide form-row form-row-wide mb-20 page-inside-p">
<input type="email" class="woocommerce-Input woocommerce-Input--email input-text form-control" name="account_email" id="account_email" autocomplete="email" value="<?php echo esc_attr( $user->user_email ); ?>" placeholder="<?php esc_html_e( 'Email address', 'woocommerce' ); ?>" />
</p>
<div class="woocommerce-form-row woocommerce-form-row--wide form-row form-row-wide form-group">
<input type="text" name="billing_phone" id="reg_billing_phone" placeholder="<?php _e( 'Phone', 'woocommerce' ); ?>" value="<?php esc_attr_e( $_POST['billing_phone'] ); ?>" class="woocommerce-Input woocommerce-Input--text input-text form-control" size="25" />
</div>....etc
名字和姓氏可以正确更改,但我在该页面中看不到 phone 号码的值,无法更新以保存。正确的做法是什么?我复制了与注册表中相同的 phone 字段,但似乎这是一种错误的方法。如何正确显示和更改?
代码的第一部分用于更新用户字段。您的 HTML 输入标签中有“名称”属性。提交这些值是通过这些名称来实现的。
提交后,如果这些字段经过验证,则 update_user_meta
函数用于使用给定字段的新值更新该用户的数据库记录。因此,$_POST['billing_phone']
用于此目的,您无法使用它检索数据。
问题出在您的“myaccount form-edit-account.php”。如您所见,所有其他正确的部分都从用户对象获取值。 Like value="<?php echo esc_attr( $user->first_name ); ?>"
获取当前用户的名字。
对于 phone 数字,您应该使用 billing_phone 字段,因为您正在为该字段使用 update_user_meta
方法,并且您可以使用 get_user_meta
方法检索更新后的数据.
因此,将 value="<?php esc_attr_e( $_POST['billing_phone'] ); ?>"
替换为正确的赋值 value="<?php echo esc_attr( get_user_meta($user->id,'billing_phone',true) ); ?>"
将解决您的问题。
此外,要从我的帐户页面更新此 phone 数字 (billing_phone) 字段,您可以查看此答案,它直接显示了解决方案:
希望这对您有所帮助。
我需要将字段 'firstname'、'lastname' 和 'phone' 添加到注册 woocommerce 表单。 我找到了那个决定。
function wooc_extra_register_fields() {?>
<div class="woocommerce-form-row woocommerce-form-row--wide form-row form-row-wide form-group">
<input type="text" name="billing_first_name" id="reg_billing_first_name" value="<?php if ( ! empty( $_POST['billing_first_name'] ) ) esc_attr_e( $_POST['billing_first_name'] ); ?>" class="woocommerce-Input woocommerce-Input--text input-text form-control" size="25" placeholder="<?php _e( 'First Name', 'mydomain' ) ?>" />
</div>
<div class="woocommerce-form-row woocommerce-form-row--wide form-row form-row-wide form-group">
<input type="text" name="billing_last_name" id="reg_billing_last_name" value="<?php if ( ! empty( $_POST['billing_last_name'] ) ) esc_attr_e( $_POST['billing_last_name'] ); ?>" placeholder="<?php _e( 'Last Name', 'mydomain' ) ?>" class="woocommerce-Input woocommerce-Input--text input-text form-control" size="25" />
</div>
<div class="woocommerce-form-row woocommerce-form-row--wide form-row form-row-wide form-group">
<input type="text" name="billing_phone" id="reg_billing_phone" placeholder="<?php _e( 'Phone', 'woocommerce' ); ?>" value="<?php esc_attr_e( $_POST['billing_phone'] ); ?>" class="woocommerce-Input woocommerce-Input--text input-text form-control" size="25" />
</div>
<?php
}
add_action( 'woocommerce_register_form_start', 'wooc_extra_register_fields' );
/**
* register fields Validating.
*/
function wooc_validate_extra_register_fields( $username, $email, $validation_errors ) {
if ( isset( $_POST['billing_first_name'] ) && empty( $_POST['billing_first_name'] ) ) {
$validation_errors->add( 'billing_first_name_error', __( '<strong>Error</strong>: First name is required!', 'woocommerce' ) );
}
if ( isset( $_POST['billing_last_name'] ) && empty( $_POST['billing_last_name'] ) ) {
$validation_errors->add( 'billing_last_name_error', __( '<strong>Error</strong>: Last name is required!.', 'woocommerce' ) );
}
if ( isset( $_POST['billing_phone'] ) && empty( $_POST['billing_phone'] ) ) {
$validation_errors->add( 'billing_phone_error', __( '<strong>Error</strong>: Phone is required!.', 'woocommerce' ) );
}
return $validation_errors;
}
add_action( 'woocommerce_register_post', 'wooc_validate_extra_register_fields', 10, 3 );
/**
* Below code save extra fields.
*/
function wooc_save_extra_register_fields( $customer_id ) {
if ( isset( $_POST['billing_phone'] ) ) {
// Phone input filed which is used in WooCommerce
update_user_meta( $customer_id, 'billing_phone', sanitize_text_field( $_POST['billing_phone'] ) );
}
if ( isset( $_POST['billing_first_name'] ) ) {
//First name field which is by default
update_user_meta( $customer_id, 'first_name', sanitize_text_field( $_POST['billing_first_name'] ) );
// First name field which is used in WooCommerce
update_user_meta( $customer_id, 'billing_first_name', sanitize_text_field( $_POST['billing_first_name'] ) );
}
if ( isset( $_POST['billing_last_name'] ) ) {
// Last name field which is by default
update_user_meta( $customer_id, 'last_name', sanitize_text_field( $_POST['billing_last_name'] ) );
// Last name field which is used in WooCommerce
update_user_meta( $customer_id, 'billing_last_name', sanitize_text_field( $_POST['billing_last_name'] ) ); }
}
add_action( 'woocommerce_created_customer', 'wooc_save_extra_register_fields' );
在我的帐户表单-编辑-account.php 模板中看起来像这样
<form class="woocommerce-EditAccountForm edit-account" action="" method="post" <?php do_action( 'woocommerce_edit_account_form_tag' ); ?> >
<?php do_action( 'woocommerce_edit_account_form_start' ); ?>
<p class="woocommerce-form-row woocommerce-form-row--first form-row form-row-first page-inside-p">
<input type="text" class="woocommerce-Input woocommerce-Input--text input-text form-control" name="account_first_name" id="account_first_name" autocomplete="given-name" value="<?php echo esc_attr( $user->first_name ); ?>" placeholder="<?php esc_html_e( 'First name', 'woocommerce' ); ?>" />
</p>
<p class="woocommerce-form-row woocommerce-form-row--last form-row form-row-last page-inside-p">
<input type="text" class="woocommerce-Input woocommerce-Input--text input-text form-control" name="account_last_name" id="account_last_name" autocomplete="family-name" value="<?php echo esc_attr( $user->last_name ); ?>" placeholder="<?php esc_html_e( 'Last name', 'woocommerce' ); ?>" />
</p>
<div class="clear"></div>
<p class="woocommerce-form-row woocommerce-form-row--wide form-row form-row-wide page-inside-p">
<input type="text" class="woocommerce-Input woocommerce-Input--text input-text form-control" name="account_display_name" id="account_display_name" value="<?php echo esc_attr( $user->display_name ); ?>" placeholder="<?php esc_html_e( 'Display name', 'woocommerce' ); ?>" />
</p>
<div class="clear"></div>
<p class="woocommerce-form-row woocommerce-form-row--wide form-row form-row-wide mb-20 page-inside-p">
<input type="email" class="woocommerce-Input woocommerce-Input--email input-text form-control" name="account_email" id="account_email" autocomplete="email" value="<?php echo esc_attr( $user->user_email ); ?>" placeholder="<?php esc_html_e( 'Email address', 'woocommerce' ); ?>" />
</p>
<div class="woocommerce-form-row woocommerce-form-row--wide form-row form-row-wide form-group">
<input type="text" name="billing_phone" id="reg_billing_phone" placeholder="<?php _e( 'Phone', 'woocommerce' ); ?>" value="<?php esc_attr_e( $_POST['billing_phone'] ); ?>" class="woocommerce-Input woocommerce-Input--text input-text form-control" size="25" />
</div>....etc
名字和姓氏可以正确更改,但我在该页面中看不到 phone 号码的值,无法更新以保存。正确的做法是什么?我复制了与注册表中相同的 phone 字段,但似乎这是一种错误的方法。如何正确显示和更改?
代码的第一部分用于更新用户字段。您的 HTML 输入标签中有“名称”属性。提交这些值是通过这些名称来实现的。
提交后,如果这些字段经过验证,则 update_user_meta
函数用于使用给定字段的新值更新该用户的数据库记录。因此,$_POST['billing_phone']
用于此目的,您无法使用它检索数据。
问题出在您的“myaccount form-edit-account.php”。如您所见,所有其他正确的部分都从用户对象获取值。 Like value="<?php echo esc_attr( $user->first_name ); ?>"
获取当前用户的名字。
对于 phone 数字,您应该使用 billing_phone 字段,因为您正在为该字段使用 update_user_meta
方法,并且您可以使用 get_user_meta
方法检索更新后的数据.
因此,将 value="<?php esc_attr_e( $_POST['billing_phone'] ); ?>"
替换为正确的赋值 value="<?php echo esc_attr( get_user_meta($user->id,'billing_phone',true) ); ?>"
将解决您的问题。
此外,要从我的帐户页面更新此 phone 数字 (billing_phone) 字段,您可以查看此答案,它直接显示了解决方案:
希望这对您有所帮助。