根据收集的信息HERE 和HERE; 我能把一些东西组合起来。
第一放弃第一种方法。它将添加一个字段值,是的。但它不允许您添加描述性字段。
相反,我们需要创建一个全新的table
从WordPress填充的结构中的标记。为此,让我们使用以下函数:
function my_custom_user_profile_fields( $user ) {
?>
<table id="facebook_user_field_table" class="form-table">
<tr id="facebook_user_field_row">
<th>
<label for="facebook_field"><?php _e(\'Facebook URL\', \'your_textdomain\'); ?></label>
</th>
<td>
<input type="text" name="facebook_field" id="facebook_field" value="<?php echo esc_attr( get_the_author_meta( \'facebook_field\', $user->ID ) ); ?>" class="regular-text" /><br />
<span class="description"><?php _e(\'Please enter your Facebook profile url.\', \'your_textdomain\'); ?></span>
</td>
</tr>
</table>
<?php
}
add_action( \'show_user_profile\', \'my_custom_user_profile_fields\' );
add_action( \'edit_user_profile\', \'my_custom_user_profile_fields\' );
这将定义我们的新
tr
元素,并用必要的结构填充它。您可以根据需要更改字段标签和描述。
注意:这只会创建新的tr
元素,并将其放置在“关于您自己”部分的底部。为了“放置”新的tr
元素(即“联系信息”),我们必须使用一些jQuery:
function my_facebook_field_placement_js() {
$screen = get_current_screen();
if ( $screen->id != "profile" && $screen->id != "user-edit" )
return;
?>
<script type="text/javascript">
jQuery(document).ready(function($) {
field = $(\'#facebook_user_field_row\').remove();
parent = $(\'#url\').closest(\'tr\');
field.insertBefore(parent);
});
</script>
<?php
}
add_action( \'admin_head\', \'my_facebook_field_placement_js\' );
此代码将
tr
元素,并将其添加到WordPress生成的“网站”字段之前。
注意:查看我们如何连接到admin_head
在这里我们要确保这不会在每个管理页面上运行。因此,此代码块的第一部分将检查当前页面,并且仅当我们在概要文件页面上时才运行代码。
现在那太好了。位置完美!!但是等等。。。现在,当我们更新字段时,数据没有保存。不要担心!!我们还有另一个钩子:
function my_save_custom_user_profile_fields( $user_id ) {
if ( !current_user_can( \'edit_user\', $user_id ) )
return FALSE;
update_user_meta( $user_id, \'facebook_field\', $_POST[\'facebook_field\'] );
}
add_action( \'personal_options_update\', \'my_save_custom_user_profile_fields\' );
add_action( \'edit_user_profile_update\', \'my_save_custom_user_profile_fields\' );
这将更新字段,并将其存储在用户元表中。然后,每当需要从模板访问此值时;只需使用
get_user_meta
作用