WordPress默认的用户资料(User Profile)只有AIM、Yahoo IM和Jabber / Google Talk,这三个国人用的不多。QQ、MSN以及Skype等可能是更好的选择。那就让我们将这三个联系方式也添加进去。
添加联系方式
将下面的代码放到主题的functions.php中
add_filter('user_contactmethods', 'my_user_contactmethods'); function my_user_contactmethods($user_contactmethods){ $user_contactmethods['qq'] = 'QQ'; $user_contactmethods['msn'] = 'MSN'; $user_contactmethods['skype'] = 'SKYPE'; return $user_contactmethods; }
访问后台->用户->我的个人资料,你将立即看到效果
既然AIM、雅虎通和Google Talk用处不大,为什么不去掉呢,这样我们的网站可以更加本地化。要去掉这三个不难,用下面的代码
add_filter('user_contactmethods', 'my_user_contactmethods'); function my_user_contactmethods($user_contactmethods){ unset($user_contactmethods['aim']); unset($user_contactmethods['yim']); unset($user_contactmethods['jabber']); return $user_contactmethods; }
完整的代码,去掉WP默认联系方式,并添加自定义联系方式,代码应放在主题的functions.php中,或者插件文件中。
add_filter('user_contactmethods', 'my_user_contactmethods'); function my_user_contactmethods($user_contactmethods){ //去掉默认联系方式 unset($user_contactmethods['aim']); unset($user_contactmethods['yim']); unset($user_contactmethods['jabber']); //添加自定义联系方式 $user_contactmethods['qq'] = 'QQ'; $user_contactmethods['msn'] = 'MSN'; $user_contactmethods['skype'] = 'SKYPE'; return $user_contactmethods; }
最终效果
Dig More
代码中重点使用的是一个filter——user_contactmethods,这个filter位于wp-includes/user.php文件结尾处,如果你想知道这个钩子具体有什么用,以及里面默认存了哪些数据,看一看user.php中的定义就可以了,如下
/** * Set up the default contact methods * * @access private * @since * * @param object $user User data object (optional) * @return array $user_contactmethods Array of contact methods and their labels. */ function _wp_get_user_contactmethods( $user = null ) { $user_contactmethods = array( 'aim' => __('AIM'), 'yim' => __('Yahoo IM'), 'jabber' => __('Jabber / Google Talk') ); return apply_filters( 'user_contactmethods', $user_contactmethods, $user ); }
如果我实在是需要在“姓名”的那一栏的最后,也就是“公开显示为”的下面分别添加性别和年龄的字段呢?求解……
除了用javascript实现,别的方法我还没想到。那个地方没有钩子函数,如果不用js的话只能去修改核心代码。你可以看下wp-admin/profile.php代码,看看能发现别的方法不,我目前还没想到。
在functions.php文件中操作哦 不然更新版本后就完了
怎么删除或隐藏或修改 注册账号时候的“密码将通过电子邮件发送给您。”这句话?
看这篇文章
https://www.solagirl.net/wordpress-user-generate-password.html
步骤4的代码就是你要的东西
真心十分感谢您的回复
不客气~~
突然间想到的一个问题 很突兀的就想到了来这问一下是否可以。
首页只显示 用户组为“作者”发布的文章,
而在另一个新建的模板页面中只显示用户组为 “投稿者”的最新文章。这样可以实现吗?
可以实现,这个我已经写成用户中心了,并实现不同用户看到自己发的文章,也可以显示所有人的文章
请问下博主 如果我想删除“个人资料”页面中的 “名字、姓氏、网站3个栏目”怎么删除啊?
我参照了http://codex.wordpress.org/Template_Tags/the_author_meta,
unset($user_contactmethods[‘website’]); 这样没用啊!
这种方法只能修改contact methods,你说的那些都是硬编码的,没有钩子可以改,这些东西写在wp-admin/user-edit.php中,可以自己看看。
如果你想显示自定义的用户profile,可以在前台创建一个page来显示,后台那个profile只能添加一些options,想改掉它现有的(除了contact info),好像不行,
请教一下博主,我使用自定义的用户profile,但是按上面的方法只能调用上面定义的字段,在前台修改后无法提交到数据库,这是什么原因啊?
前台提交要自己写存储代码的,这个只能管后台。
add_action(‘admin_enqueue_scripts’, ‘dreamlam_admin_script’);
function dreamlam_admin_script() {
wp_register_script(‘custom’, get_template_directory_uri().’/js/admin.js’); //加载admin.js
wp_enqueue_script(‘custom’);
}
admin.js里面添加以下代码….
jQuery(document).ready(function($) {
$(function() {
$(“#createuser .form-table tbody label, #your-profile .form-table tbody label”).each(function(i) {
if ($(this).text() == “名字 ” || $(this).text() == “名字” || $(this).text() == “姓氏 ” || $(this).text() == “姓氏”) {
$(this).parents(“tr”).remove();
}
});
});
});
用js隐藏可以,但这么短的代码inline就可以了,不应该引入外部文件而且在所有后台页面都加载。另外这种隐藏方式用css就行啊,还不用担心客户端禁用js
PS.你说的the_author_meta是一个template tag,只能用在前台