如何通过插件在默认添加用户表单中添加新自定义域

时间:2019-03-01 作者:Mohammad Hamdan

我是wordpress的新手,一周前开始在wordpress中开发插件。如果可能的话,我必须在默认的添加用户表单中添加新的自定义字段。然后,如果我写入wp\\u get\\u current\\u user(),是否可以获取添加到新自定义字段中的数据?任何人请帮忙。提前谢谢你。

2 个回复
最合适的回答,由SO网友:Roman Bitca 整理而成

这是可能的。为此,我们将使用4个挂钩(操作):show\\u user\\u profile、edit\\u user\\u profile、personal\\u options\\u update、edit\\u user\\u profile\\u update。

下面是如何在WordPress中为用户添加额外字段的示例。

添加用户信息字段功能

add_action( \'show_user_profile\', \'extra_user_profile_fields\', 10, 1 );
add_action( \'edit_user_profile\', \'extra_user_profile_fields\', 10, 1 );

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

    <table class="form-table">
    <tr>
        <th><label for="user_img_path_image"><?php _e("Image path"); ?></label></th>
        <td>
            <input type="text" name="user_img_path_image" id="user_img_path_image" value="<?php echo esc_attr( get_the_author_meta( \'user_img_path_image\', $user->ID ) ); ?>" class="regular-text" /><br />
            <span class="description"><?php _e("Path to country image."); ?></span>
        </td>
    </tr>
    <tr>
        <th><label for="user_country_field"><?php _e("Country field"); ?></label></th>
        <td>
            <input type="text" name="user_country_field" id="user_country_field" value="<?php echo esc_attr( get_the_author_meta( \'user_country_field\', $user->ID ) ); ?>" class="regular-text" /><br />
            <span class="description"><?php _e(""); ?></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, \'user_img_path_image\', $_POST[\'user_img_path_image\'] );
    update_user_meta( $user_id, \'user_country_field\', $_POST[\'user_country_field\'] );

}
// end - Add user info fields
只需将此代码复制并粘贴到插件或函数中。php,您必须在Wordpress后端用户编辑/添加页面中看到新的2个字段。

要在前端提取日期,请使用以下代码:

$user_facebook_id_acc = get_the_author_meta( \'user_facebook_id_acc\', $current_user_data->ID );

SO网友:phatskat

这是很有可能的。在WordPress中,有一个概念FiltersActions, 统称为“挂钩”。钩子允许您“钩住”WordPress以更改值(过滤器)或执行您自己的函数(操作)。

对于WordPress用户页面,您应该查看以下挂钩:

  • show_user_profile - 在“关于你自己”部分后为当前用户激发edit_user_profile - 编辑时激发another “关于用户”部分后的用户配置文件查看页面时会触发这两个操作。在这里,您可以添加自己的代码来显示新字段,例如。

    add_action( \'personal_options_update\', function( $user ) {
        $my_field_value = $user->my_field_key; // \'my_field_key\' is the user meta field key in wp_usermeta
        // You can also use
        $my_field_value = get_user_meta( $user->ID, \'my_field_key\', true );
    ?>
    <input type="text" name="my_field_key" value="<?php echo esc_attr( $my_field_value ); ?>"/>
    <?php
    });
    
    然后,您可以使用以下操作更新用户:-personal_options_update - 更新自己的配置文件页时激发。-edit_user_profile_update - 更新其他用户的配置文件时激发。

    add_action( \'personal_options_update\', function( $user_id ) {
        // You should escape and verify the input.
        $my_value = filter_input( INPUT_GET, \'my_field_key\', FITLER_SANITIZE_STRING );
    
        if ( ! $my_value ) {
            delete_user_meta( $user_id, \'my_field_key\' );
            return;
        }
    
        update_user_meta( $user_id, \'my_field_key\', $my_value );
    } );
    
    这可以使用一些更好的HTML来适应页面,并且应该根据您的使用情况进行修改,但希望这能让您知道该去哪里。看看/wp-admin/user-edit.php 了解更多详细信息。

相关推荐

获取所有wp_USERS按元密钥排序

我正在尝试让用户列表按元键排序。我的意思是我已经设置了元键user_last_login. 某些用户没有此元密钥。一些用户拥有它。我想在一个查询中同时获得两个用户,但如果存在元键,则这些用户将排在第一位,其余用户应排在最后。这是我的问题$meta_query_args = array( \'relation\' => \'OR\', // Optional, defaults to \"AND\" array(