0

我试图将用户配置文件“公开显示名称”从选择框更改为文本框。关于如何做到这一点的任何想法?什么都找不到。

4

3 回答 3

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" );

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

于 2015-02-06T07:28:36.087 回答
0

两种方法来解决它。您编辑 wordpress 核心文件,这不是一个好方法。或者您可以使用 wordpress 钩子在配置文件框中添加一个额外的字段。

我给你第一种方法:

转到 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>

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

于 2013-05-08T00:21:56.603 回答
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中即可:)

于 2019-03-30T20:19:07.013 回答