管理员可以编辑的用户字段?

时间:2012-10-23 作者:mathisHard

如何为管理员可以编辑的用户配置文件添加自定义用户字段?我希望用户能够看到他们个人资料中字段的值,但我不希望他们编辑它。如何使用WordPress实现这一点?

1 个回复
SO网友:brasofilo

我使用它是为了让老师标记学生订阅了哪些课程。

这是该代码的通用版本,仅使用一个额外字段。

管理视图

profile admin view

其他用户视图profile user view

<小时/>

<?php
/* Plugin Name: Admin User Fields */

add_action( \'admin_init\', \'wpse_70265_init\');

function wpse_70265_init() 
{
    if( current_user_can( \'administrator\' ) ) 
    {
        add_action( \'show_user_profile\', \'wpse_70265_profile_fields\', 10 );
        add_action( \'edit_user_profile\', \'wpse_70265_profile_fields\', 10 );
    } 
    else 
    {
        add_action( \'show_user_profile\', \'wpse_70265_non_edit_profile_fields\', 10 );    
    }
    
    add_action( \'personal_options_update\', \'wpse_70265_save_profile_fields\' );
    add_action( \'edit_user_profile_update\', \'wpse_70265_save_profile_fields\' );
}

function wpse_70265_non_edit_profile_fields( $user ) 
{ 
    $has_option = get_the_author_meta( \'option_status\', $user->ID );
    ?> 
    <table class="form-table">
        <tr>
            <th><label for="agree">Option Status</label></th>
            <td>
                <ul>
                    <li><?php if ( \'yes\' == $has_option ) { echo "checked"; } else { echo "not checked"; }?></li>
                </ul>
            </td>           
        </tr>
        
    </table>
    <?php 
}

function wpse_70265_profile_fields( $user ) 
{ 
    $has_option = get_the_author_meta( \'option_status\', $user->ID );
    ?>

    <table class="form-table">
        <tr>
            <th><label for="agree">Option Status</label></th>
            <td>
                <ul>
                    <li><input value="yes" name="option_status" <?php if ( \'yes\' == $has_option ) { ?>checked="checked"<?php }?> type="checkbox" /> Enable/Disable</li>
                </ul>
            </td>           
        </tr>
        
    </table>
    <?php 
}

function wpse_70265_save_profile_fields( $user_id ) 
{

    if ( !current_user_can( \'edit_user\', $user_id ) )
        return false;

    update_usermeta( $user_id, \'option_status\', $_POST[\'option_status\'] );
}

结束