我尝试在我的网站上的WooCommerce注册页面中实现自定义字段,效果很好,但如果要将该日期修改为My Account page,则不会保存更改。看起来我错过了一些不会将数据传输到数据库的地方。这是自定义字段的代码:
<p class="form-row form-row-last">
<label for="reg_billing_birthdate"><?php _e( 'Date of Birth', 'woocommerce' ); ?> <span class="required">*</span></label>
<input type="text" class="input-text" name="billing_birthdate" id="reg_billing_birthdate" value="<?php if ( ! empty( $_POST['billing_birthdate'] ) ) esc_attr_e( $_POST['billing_birthdate'] ); ?>" />
</p>
列billing_birthdate被创建到wp_usermeta表中,但我将这段代码也添加到functions.php中进入主题:
和此代码将数据传递到数据库..
/**
* Below code save extra fields.
*/
function wooc_save_extra_register_fields( $customer_id ) {
if ( isset( $_POST['billing_birthdate'] ) ) {
// Billing Address field which is by default
update_user_meta( $customer_id, 'last_name', sanitize_text_field( $_POST['billing_birthdate'] ) );
// Last name field which is used in WooCommerce
update_user_meta( $customer_id, 'billing_birthdate', sanitize_text_field( $_POST['billing_birthdate'] ) );
}
}
我还将此代码添加到functions.php文件中,以便能够将该字段编辑到编辑帐户页面。
/**
* To display additional field at My Account page
* Once member login: edit account
*/
add_action( 'woocommerce_edit_account_form', 'my_woocommerce_edit_account_form' );
function my_woocommerce_edit_account_form() {
$user_id = get_current_user_id();
$user = get_userdata( $user_id );
if ( !$user )
return;
$birthdate = get_user_meta( $user_id, 'birthdate', true );
?>
<fieldset>
<p class="form-row form-row-thirds">
<label for="birthdate">Birth date:</label>
<input type="text" name="birthdate" value="<?php echo esc_attr( $birthdate ); ?>" class="input-text" />
<br />
<span style="font-size: 12px;">(Birth date format: DD-MM-YYYY. eg: 31-12-2005)</span>
</p>
</fieldset>
<?php
} // end func
/**
* This is to save user input into database
* hook: woocommerce_save_account_details
*/
add_action( 'woocommerce_save_account_details', 'my_woocommerce_save_account_details' );
function my_woocommerce_save_account_details( $user_id ) {
update_user_meta( $user_id, 'birthdate', htmlentities( $_POST[ 'birthdate' ] ) );
} // end func
所以我的问题是我的错误在将该字段编辑到我的帐户页面之后,更改未反映到帐户信息中心。
答案 0 :(得分:2)
我发现,您在插入数据时正在更新名为“ billing_birthdate ”的字段。但是在编辑时,您正在更新字段“生日日期”。 更新:
update_user_meta( $customer_id, 'billing_birthdate',htmlentities( $_POST['birthdate'] ) );
希望这对你有用。