Wordpress 用户个人资料显示名称 - 从选择框更改为文本框

问题描述 投票:0回答:3

我正在尝试将用户配置文件“公开显示名称”从选择框更改为文本框。关于如何做到这一点有什么想法吗?全部找不到任何东西。

php wordpress field profile
3个回答
0
投票

有两种方法解决。你编辑wordpress core文件,这不是一个好方法。或者您可以使用 wordpress hook 在个人资料框中添加额外的字段。

我给你第一种方法:

转到 wp-admin/user-edit.php

打开文件。然后找到

<td>
    <select name="display_name" id="display_name">
    <?php
        $public_display = array();
        $public_display['display_nickname']  = $profileuser->nickname;
        $public_display['display_username']  = $profileuser->user_login;

        if ( !empty($profileuser->first_name) )
            $public_display['display_firstname'] = $profileuser->first_name;

        if ( !empty($profileuser->last_name) )
            $public_display['display_lastname'] = $profileuser->last_name;

        if ( !empty($profileuser->first_name) && !empty($profileuser->last_name) ) {
            $public_display['display_firstlast'] = $profileuser->first_name . ' ' . $profileuser->last_name;
            $public_display['display_lastfirst'] = $profileuser->last_name . ' ' . $profileuser->first_name;
        }

        if ( !in_array( $profileuser->display_name, $public_display ) ) // Only add this if it isn't duplicated elsewhere
            $public_display = array( 'display_displayname' => $profileuser->display_name ) + $public_display;

        $public_display = array_map( 'trim', $public_display );
        $public_display = array_unique( $public_display );

        foreach ( $public_display as $id => $item ) {
    ?>
        <option id="<?php echo $id; ?>"<?php selected( $profileuser->display_name, $item ); ?>><?php echo $item; ?></option>
    <?php
        }
    ?>
    </select>
</td>

更改它
<th><label for="display_name"><?php _e('Display name publicly as'); ?> </label></th>
<td><input type="text" name="display_name" id="display_name" value="<?php echo esc_attr( $profileuser->display_name ); ?>" class="regular-text" /></td>

但这仍然不是一个好的解决方案。


0
投票

我遇到了同样的问题,并使用了一些 JavaScript 来解决它。 Wordpress 允许您将

display_name
字段设置为您想要的任何内容,因此您可以使用以下脚本(在主题的
functions.php
文件中)将选择转换为文本字段。

function change_display_name_to_textfield() {
  echo "><div>"; // don't remove '>'
  ?>
  <script>
    jQuery(function($) { 
      // replace display_name select with input
      $('select#display_name').after( '<input type="text" name="display_name" id="display_name" value="' + $('#display_name').val() + '" class="regular-text">' ).remove();
    })
  </script>
  <?php
  echo "</div"; // don't add '>'
}

// hook into new user and edit user pages
add_action( "user_new_form_tag", "change_display_name_to_textfield" );
add_action( "user_edit_form_tag", "change_display_name_to_textfield" );

注意开始/结束标签的奇怪使用。这是因为这些特定的钩子在开始表单标记结束之前执行。因此,您需要关闭表单标签,打印脚本,然后打印最终标签而不关闭它。


0
投票

对于管理员用户编辑页面,我找到了最简单的方法之一:

add_action( 'personal_options', 'rm_personal_options' );
function rm_personal_options($profileuser){
    if( !is_admin() ) return; ?>
<script type="text/javascript">
    jQuery(document).ready(function($){
        //$("input#nickname").parent().parent().hide();
        $("select#display_name").replaceWith(function(){
            return '<input type="text" name="display_name" id="display_name" value="'+$(this).val()+'" class="regular-text" style="width:25em" />';
        });
    });
</script>
    <?php
}

只需将其粘贴到主题文件的functions.php中即可:)

© www.soinside.com 2019 - 2024. All rights reserved.