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

 

17条留言

  1. 如果我实在是需要在“姓名”的那一栏的最后,也就是“公开显示为”的下面分别添加性别和年龄的字段呢?求解……

    1. 除了用javascript实现,别的方法我还没想到。那个地方没有钩子函数,如果不用js的话只能去修改核心代码。你可以看下wp-admin/profile.php代码,看看能发现别的方法不,我目前还没想到。

  2. 在functions.php文件中操作哦 不然更新版本后就完了

  3. 怎么删除或隐藏或修改 注册账号时候的“密码将通过电子邮件发送给您。”这句话?

  4. 真心十分感谢您的回复

      1. 突然间想到的一个问题 很突兀的就想到了来这问一下是否可以。

        首页只显示 用户组为“作者”发布的文章,

        而在另一个新建的模板页面中只显示用户组为 “投稿者”的最新文章。这样可以实现吗?

        1. 可以实现,这个我已经写成用户中心了,并实现不同用户看到自己发的文章,也可以显示所有人的文章

  5. 请问下博主 如果我想删除“个人资料”页面中的 “名字、姓氏、网站3个栏目”怎么删除啊?
    我参照了http://codex.wordpress.org/Template_Tags/the_author_meta,

    unset($user_contactmethods[‘website’]); 这样没用啊!

    1. 这种方法只能修改contact methods,你说的那些都是硬编码的,没有钩子可以改,这些东西写在wp-admin/user-edit.php中,可以自己看看。

      如果你想显示自定义的用户profile,可以在前台创建一个page来显示,后台那个profile只能添加一些options,想改掉它现有的(除了contact info),好像不行,

      1. 请教一下博主,我使用自定义的用户profile,但是按上面的方法只能调用上面定义的字段,在前台修改后无法提交到数据库,这是什么原因啊?

        1. 前台提交要自己写存储代码的,这个只能管后台。

      2. 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();
        }
        });
        });
        });

        1. 用js隐藏可以,但这么短的代码inline就可以了,不应该引入外部文件而且在所有后台页面都加载。另外这种隐藏方式用css就行啊,还不用担心客户端禁用js

    2. PS.你说的the_author_meta是一个template tag,只能用在前台

评论功能已关闭