如何在“用户”个人资料上添加字段?例如国家/地区,年龄等


21

我对计算机/代码等不是很好。我使用的插件使注册表格变得很杂,然后在该表格中添加了国家/地区,年龄段,性别等。我单击将注册器添加到wordpress用户thingy中的选项。但是,当我尝试时,后端的“用户”部分将仅显示用户名和电子邮件。其他方式是否可以在“用户”部分显示?

我需要它们显示出来以用于统计用途。


5
请尝试我们的搜索。您会发现许多示例。
fuxia

Answers:


58

您需要使用show_user_profileedit_user_profilepersonal_options_update,和edit_user_profile_update挂钩。

您可以使用以下代码在“用户”部分中添加其他字段

在“编辑用户”部分中添加额外字段的代码:

add_action( 'show_user_profile', 'extra_user_profile_fields' );
add_action( 'edit_user_profile', 'extra_user_profile_fields' );

function extra_user_profile_fields( $user ) { ?>
    <h3><?php _e("Extra profile information", "blank"); ?></h3>

    <table class="form-table">
    <tr>
        <th><label for="address"><?php _e("Address"); ?></label></th>
        <td>
            <input type="text" name="address" id="address" value="<?php echo esc_attr( get_the_author_meta( 'address', $user->ID ) ); ?>" class="regular-text" /><br />
            <span class="description"><?php _e("Please enter your address."); ?></span>
        </td>
    </tr>
    <tr>
        <th><label for="city"><?php _e("City"); ?></label></th>
        <td>
            <input type="text" name="city" id="city" value="<?php echo esc_attr( get_the_author_meta( 'city', $user->ID ) ); ?>" class="regular-text" /><br />
            <span class="description"><?php _e("Please enter your city."); ?></span>
        </td>
    </tr>
    <tr>
    <th><label for="postalcode"><?php _e("Postal Code"); ?></label></th>
        <td>
            <input type="text" name="postalcode" id="postalcode" value="<?php echo esc_attr( get_the_author_meta( 'postalcode', $user->ID ) ); ?>" class="regular-text" /><br />
            <span class="description"><?php _e("Please enter your postal code."); ?></span>
        </td>
    </tr>
    </table>
<?php }

用于在数据库中保存额外字段详细信息的代码

add_action( 'personal_options_update', 'save_extra_user_profile_fields' );
add_action( 'edit_user_profile_update', 'save_extra_user_profile_fields' );

function save_extra_user_profile_fields( $user_id ) {
    if ( !current_user_can( 'edit_user', $user_id ) ) { 
        return false; 
    }
    update_user_meta( $user_id, 'address', $_POST['address'] );
    update_user_meta( $user_id, 'city', $_POST['city'] );
    update_user_meta( $user_id, 'postalcode', $_POST['postalcode'] );
}

关于此主题,也有一些博客文章可能会有所帮助:


太棒了,这很棒。
AVEbrahimi

1
这不是在数据库中存储我额外字段中的数据。有什么建议吗?谢谢。
b_dubb

@b_dubb,能否请您分享您的代码?因此,我将检查并告知您。
Arpita Hunka

我已经解决了我的问题,但感谢您的支持。
b_dubb

3

您最好使用get_user_meta(而不是get_the_author_meta):

function extra_user_profile_fields( $user ) {
    $meta = get_user_meta($user->ID, 'meta_key_name', false);
}

3

高级自定义字段Pro的插件将允许您添加到用户配置文件字段没有任何编码。


3
只有专业版
我是

有免费的方法可以用PHP做到这一点。
Johan Pretorius

是的-如果您愿意,绝对可以在没有ACF的情况下使用PHP编写此代码。我的经验是,它需要100多行代码,并且您需要担心随机数验证,编写表单的HTML等问题。与ACF中的5-10分钟的设置相比,可能需要花费几个小时的编码时间。可能取决于您是否已经在项目中使用ACF Pro。
squarecandy
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.