在管理中显示额外的个人资料字段-带有下划线的问题

时间:2016-02-27 作者:Robert Andrews

我正在将额外的配置文件字段保存到我的用户配置文件中-不是通过用户管理,而是通过另一种方法(一个插件,但这并不重要-所有用户数据都正确存在)。

现在,我还想在管理后端显示有关用户配置文件的额外信息,并使其在那里也可编辑。我跟踪了Justin Tadlock代码http://justintadlock.com/archives/2009/09/10/adding-and-using-custom-user-profile-fields - 这意味着我在函数中添加了一些操作和两个函数。php,以支持在后端显示和更新这些字段。

问题是,名称中包含下划线的字段不能正确返回结果。

即,虽然我可以正确返回“company”的值,“company\\u url”的值也会像返回“company”一样返回(例如,“Microsoft”而不是“company”)http://www.microsoft.com“”。

我的两个功能如下。我还没有更新save函数,因为这只会用“company”值的副本损坏用户数据。我有许多包含“\\u1”的字段名,因此这很重要。

 /*
    * Extra profile fields: Show on user admin backend
  * http://justintadlock.com/archives/2009/09/10/adding-and-using-custom-user-profile-fields
    */

 add_action( \'show_user_profile\', \'mysite_show_user_meta\' );
 add_action( \'edit_user_profile\', \'mysite_show_extra_profile_fields\' );

 function mysite_show_extra_profile_fields( $user ) { ?>

    <h3>Extra profile information</h3>

    <table class="form-table">

        <tr>
            <th><label for="twitter">Twitter</label></th>
            <td>
                <input type="text" name="twitter" id="twitter" value="<?php echo esc_attr( get_the_author_meta( \'twitter\', $user->ID ) ); ?>" class="regular-text" /><br />
                <span class="description">Please enter your Twitter username.</span>
            </td>
        </tr>

    <tr>
            <th><label for="company">Company</label></th>
            <td>
                <input type="text" name="company" id="company" value="<?php echo esc_attr( get_the_author_meta( \'company\', $user->ID ) ); ?>" class="regular-text" /><br />
                <span class="description">Please enter your company.</span>
            </td>
        </tr>
    <tr>
            <th><label for="company_url">Company website</label></th>
            <td>
                <input type="text" name="company_url" id="company_url" value="<?php echo esc_attr( get_the_author_meta( \'company_url\', $user->ID ) ); ?>" class="regular-text" /><br />
                <span class="description">Please enter your company website URL.</span>
            </td>
        </tr>
    <tr>
            <th><label for="photo_url">Photo URL</label></th>
            <td>
                <input type="text" name="photo_url" id="photo_url" value="<?php echo esc_attr( get_the_author_meta( \'photo_url\', $user->ID ) ); ?>" class="regular-text" /><br />
                <span class="description">Please enter your photo URL.   </span>
            </td>
        </tr>
    </table>
 <?php }


 /*
    * Extra profile fields: Save
  * http://justintadlock.com/archives/2009/09/10/adding-and-using-custom-user-profile-fields
    */

 add_action( \'personal_options_update\', \'mysite_user_meta\' );
 add_action( \'edit_user_profile_update\', \'mysite_user_meta\' );

 function mysite_user_meta( $user_id ) {

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

    /* Copy and paste this line for additional fields. Make sure to change \'twitter\' to the field ID. */
    update_usermeta( $user_id, \'twitter\', $_POST[\'twitter\'] );
 }

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

您确实应该使用连字符(-)而不是下划线重命名字段名。除了为连字符(-)替换下划线(\\u)之外,没有其他解决方案。我在某处读到,问题在于新的php命名约定,当在函数中使用时,它会在使用下划线时分隔单词。由于Wordpress在其核心功能中使用php,它仍然是一个bug。很抱歉,您的问题无法解决,但如果表单是您字段的唯一位置

SO网友:Robert Andrews

跟进-这与下划线问题无关。问题是我的。company\\u url的值与company的值匹配。这是我通过导入错误地复制数据的错误。通过正确地重新导入解决了此问题。

相关推荐

如何从USERS-edit.php中删除颜色选择器代码

我知道我不应该改变Wordpress的核心。但如果我想在“用户编辑”中使用仪表板用户配置文件页面。php和删除大块代码(如颜色选择器)的方法。从第259行到第336行-我想全部删除。<?php if ( ! ( IS_PROFILE_PAGE && ! $user_can_edit ) ) : ?> <tr class="user-rich-editing-wrap"> <th scope="