将用户自定义帐户字段添加到 WooCommerce 结账

我使用以下代码向管理员用户添加了自定义元字段:``


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 中显示元,它应该在 wp REST API 中值。


我怎样才能添加这个?


动漫人物
浏览 132回答 1
1回答

拉风的咖菲猫

您可以使用以下命令将user_dob自定义字段添加到结帐帐户注册字段:add_filter( 'woocommerce_checkout_fields', 'add_checkout_account_birthday_field' );function add_checkout_account_birthday_field( $fields ){&nbsp; &nbsp; $fields['account']['user_dob'] = array(&nbsp; &nbsp; &nbsp; &nbsp; 'type'&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; => 'date',&nbsp; &nbsp; &nbsp; &nbsp; 'label'&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;=> __("Birthday", "woocommerce"),&nbsp; &nbsp; &nbsp; &nbsp; 'placeholder'&nbsp; &nbsp; &nbsp; &nbsp;=> __("Please use YYYY-MM-DD as the date format.", "woocommerce"),&nbsp; &nbsp; &nbsp; &nbsp; 'class'&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;=> array('form-row-wide regular-text ltr'),&nbsp; &nbsp; &nbsp; &nbsp; 'required'&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; => true,&nbsp; &nbsp; &nbsp; &nbsp; '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])'],&nbsp; &nbsp; );&nbsp; &nbsp; return $fields;}add_action( 'woocommerce_checkout_update_customer', 'save_checkout_account_birthday_field', 10, 2 );function save_checkout_account_birthday_field( $customer, $data ){&nbsp; &nbsp; if ( isset($_POST['user_dob']) && ! empty($_POST['user_dob']) ) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;$customer->update_meta_data( 'user_dob', sanitize_text_field($_POST['user_dob']) );&nbsp; &nbsp; }}代码位于活动子主题(或活动主题)的functions.php 文件中。经过测试并有效。下订单后,出生日期将保存到用户数据中并显示在管理员用户的“生日”字段中。
打开App,查看更多内容
随时随地看视频慕课网APP