我试图将用户配置文件“公开显示名称”从选择框更改为文本框。关于如何做到这一点的任何想法?什么都找不到。
问问题
1438 次
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 回答