在Woocommerce中的我的帐户>编辑帐户上添加手机字段

时间:2018-06-29 13:58:16

标签: php wordpress woocommerce custom-fields hook-woocommerce

我的问题: 如何在Woocommerce my-account/edit-account/页中添加手机字段 (相关模板:form-edit-account.php个文件)

就像下面的答案一样:
Saving the value of a custom field phone number in WooCommerce My account > Account details

但是此答案代码不完整,因为缺少一些挂钩函数。感谢您提供任何帮助以完成工作,这意味着现场显示。

1 个答案:

答案 0 :(得分:5)

您有3个选项可在“我的帐户”>“编辑帐户”页面上显示自定义手机字段:

1)作为第一个字段,使用woocommerce_edit_account_form_start动作挂钩(见下文)。

2)在现有字段之后使用woocommerce_edit_account_form动作挂钩:

// Display the mobile phone field
// add_action( 'woocommerce_edit_account_form_start', 'add_billing_mobile_phone_to_edit_account_form' ); // At start
add_action( 'woocommerce_edit_account_form', 'add_billing_mobile_phone_to_edit_account_form' ); // After existing fields
function add_billing_mobile_phone_to_edit_account_form() {
    $user = wp_get_current_user();
    ?>
     <p class="woocommerce-form-row woocommerce-form-row--wide form-row form-row-wide">
        <label for="billing_mobile_phone"><?php _e( 'Mobile phone', 'woocommerce' ); ?> <span class="required">*</span></label>
        <input type="text" class="woocommerce-Input woocommerce-Input--phone input-text" name="billing_mobile_phone" id="billing_mobile_phone" value="<?php echo esc_attr( $user->billing_mobile_phone ); ?>" />
    </p>
    <?php
}

// Check and validate the mobile phone
add_action( 'woocommerce_save_account_details_errors','billing_mobile_phone_field_validation', 20, 1 );
function billing_mobile_phone_field_validation( $args ){
    if ( isset($_POST['billing_mobile_phone']) && empty($_POST['billing_mobile_phone']) )
        $args->add( 'error', __( 'Please fill in your Mobile phone', 'woocommerce' ),'');
}

// Save the mobile phone value to user data
add_action( 'woocommerce_save_account_details', 'my_account_saving_billing_mobile_phone', 20, 1 );
function my_account_saving_billing_mobile_phone( $user_id ) {
    if( isset($_POST['billing_mobile_phone']) && ! empty($_POST['billing_mobile_phone']) )
        update_user_meta( $user_id, 'billing_mobile_phone', sanitize_text_field($_POST['billing_mobile_phone']) );
}

代码进入您的活动子主题(或活动主题)的function.php文件中。经过测试,可以正常工作。

3)在特定位置,通过主题on this documentation覆盖myaccount/form-edit-account.php模板文件。并在this answer thread上……

在这种情况下,您需要在模板like in this answer thread中添加以下html代码:

 <p class="woocommerce-form-row woocommerce-form-row--wide form-row form-row-wide">
    <label for="billing_mobile_phone"><?php _e( 'Mobile phone', 'woocommerce' ); ?> <span class="required">*</span></label>
    <input type="text" class="woocommerce-Input woocommerce-Input--phone input-text" name="billing_mobile_phone" id="billing_mobile_phone" value="<?php echo esc_attr( $user->billing_mobile_phone ); ?>" />
</p>
  

在后一种情况下,您需要在主题的function.php文件中添加第2节中的最后两个挂钩函数(验证和保存)。