在WooCommerce结账中添加用户自定义帐户字段。

3
我已经使用以下代码向管理员用户添加了自定义元字段:``
function wporg_usermeta_form_field_birthday( $user )
{
    ?>
    
    <table class="form-table" id="table-form-dob" >
        <tr>
            <th><h3 style="margin: 0">Extra Meta Fields</h3></th>
        </tr>
        <tr>
            <th>
                <label for="user_dob">Birthday</label>
            </th>
            <td>
                <input type="date"
                       class="regular-text ltr"
                       id="user_dob"
                       name="user_dob"
                       value="<?= esc_attr( get_user_meta( $user->ID, 'user_dob', true ) ) ?>"
                       title="Please use YYYY-MM-DD as the date format."
                       pattern="(19[0-9][0-9]|20[0-9][0-9])-(1[0-2]|0[1-9])-(3[01]|[21][0-9]|0[1-9])"
                       required>
                
            </td>
        </tr>
    </table>
    <script>
        jQuery(function($){
        jQuery('#table-form-dob tr').insertAfter(jQuery('#display_name').parentsUntil('tr').parent());
    });
    </script>
    <?php
}
  
function wporg_usermeta_form_field_birthday_update( $user_id )
{
    if ( ! current_user_can( 'edit_user', $user_id ) ) {
        return false;
    }
    return update_user_meta(
        $user_id,
        'user_dob',
        $_POST['user_dob']
    );
}
  
add_action(
    'show_user_profile',
    'wporg_usermeta_form_field_birthday'
);
  
add_action(
    'edit_user_profile',
    'wporg_usermeta_form_field_birthday'
);
  
add_action(
    'personal_options_update',
    'wporg_usermeta_form_field_birthday_update'
);
  
add_action(
    'edit_user_profile_update',
    'wporg_usermeta_form_field_birthday_update'
);

register_meta('user', 'user_dob', array(
  "type" => "string",
  "show_in_rest" => true // this is the key part
));


我想在WooCommerce结账页面上添加相同的字段,这样当用户在WooCommerce结账页面注册时,我们应该能够在管理员用户资料/编辑部分中看到这个“生日”字段(user_dob)。
此外,我目前正在访问REST API中的用户元数据,当前它在用户保存值后显示REST API中的元数据。我该如何添加这个功能?
1个回答

3
您可以使用以下代码将user_dob自定义字段添加到结帐账户注册字段中:
add_filter( 'woocommerce_checkout_fields', 'add_checkout_account_birthday_field' );
function add_checkout_account_birthday_field( $fields ){
    $fields['account']['user_dob'] = array(
        'type'              => 'date',
        'label'             => __("Birthday", "woocommerce"),
        'placeholder'       => __("Please use YYYY-MM-DD as the date format.", "woocommerce"),
        'class'             => array('form-row-wide regular-text ltr'),
        'required'          => true,
        'custom_attributes' => ['pattern' => '(19[0-9][0-9]|20[0-9][0-9])-(1[0-2]|0[1-9])-(3[01]|[21][0-9]|0[1-9])'],
    );
    return $fields;
}

add_action( 'woocommerce_checkout_update_customer', 'save_checkout_account_birthday_field', 10, 2 );
function save_checkout_account_birthday_field( $customer, $data ){
    if ( isset($_POST['user_dob']) && ! empty($_POST['user_dob']) ) {
         $customer->update_meta_data( 'user_dob', sanitize_text_field($_POST['user_dob']) );
    }
}

将代码放在您的活动子主题(或活动主题)的functions.php文件中。已测试并且有效。

输入图像描述

下单后,出生日期将保存到用户数据中并显示在管理员用户的“生日”字段中。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接