HardBirch

多个wordpress网站共享用户数据的方法

时间:12-07-25 栏目:WP技巧分享 作者:魔豆先生 评论:1 点击: 4,614 次

WordPress可以自定义用户数据表,这样多个wordpress网站就可以共享用户数据了,有时候这是非常方便的,这些Wordpress站点应该安装在同一个数据库下,数据表前缀各不相同。由于Wordpress的用户数据表(wp_users和wp_usermeta)相对独立(点击这里查看Wordpress数据表关系),我们不用担心共享用户数据后会打乱其它的应用。

更改用户表的方法是编辑站点的wp_config.php,加入如下代码,假设需要更改的站点前缀是wpen_,需要共享的用户表前缀是wp_

View Code:

PHPdefine('CUSTOM_USER_TABLE', 'wp_users');

define('CUSTOM_USER_META_TABLE', 'wp_usermeta');

例如我要做多语言站点,每个语言都是一个独立的wordpress安装,中文版本作为主站,在主站下安装一个新的wp站点作为英文版本,只共享用户数据,其它的都是独立的,类似multisite但有multisite不具备的优势,毕竟很多插件对multisite的支持不是很好。

这样更改存在一定问题,wp_usermeta表中存储了用户权限,这个权限的值是以wp前缀开头的,以管理员为例,管理员用户id为1,角色是administrator,则表中就有这样一条记录

user_id->1, meta_key->wp_capabilities, meta_value->a:1:{s:13:"administrator";s:1:"1";}

如果该用户去登陆共享数据并且以wpen_为前缀的网站(http://youdomain.com/wp-admin),就会被提示

You do not have sufficient permissions to access this page. (你没有足够的权限访问该页面)

解决的方法是向数据库插入包含wpen_前缀的数据,即

user_id->1, meta_key->wpen_capabilities, meta_value->a:1:{s:13:"administrator";s:1:"1";}

SQL语句为

 

View Code:

MYSQLINSERT INTO `dbname`.`wp_usermeta` (`umeta_id`, `user_id`, `meta_key`, `meta_value`) VALUES (NULL, '1', 'wpen_capabilities', 'a:1:{s:13:"administrator";s:1:"1";}');

 

这样做仅仅使用户id为1的管理员可以正常登陆这两个网站,如果创建了新的用户,无论是管理员还是普通用户,都会被提示权限不足,除非你一条一条的向数据库里插入数据,并且要注意改变角色。一劳永逸的做法是写一段小代码让这个过程自动完成,代码如下

View Code:

PHP//设置主站的前缀,其它网站都共享该网站的用户数据表

$main_prefix = 'wp_';

//设置子站的前缀,例如有两个子站,前缀分别为wpen_和wpcn_

$addi_prefixs = array('wpen_','wpcn_');

//添加功能到用户注册的钩子里

add_action( 'user_register', 'dup_capabilities' );

function dup_capabilities( $user_id ) {

global $main_prefix, $addi_prefixs;

//获取该用户权限的值,因为不同角色的值是不同的

if( $cap_val = get_user_meta( $user_id, $main_prefix.'capabilities', true ) ) {

if( count( $addi_prefixs ) > 0 ) {

foreach( $addi_prefixs as $prefix ) {

add_user_meta( $user_id, $prefix.'capabilities', $cap_val, true );

}

}

}

}

让用户在多个WordPress网站之间通行登录

实现步骤:

1. 打开主站的wp-config.php,找到如下代码, 如果宏定义的值不是随机字符串,点击这里生成。

View Code:

define('AUTH_KEY', '{+Y:wtH~E}E2g7#$/_E%^}%,[Z#;+R+vk]@q:x4u)?G,-#I89g');

define('SECURE_AUTH_KEY', ' -$Hdq00N4F|iv4n5?+jUb;h-K+}R;&n.AAFv0');

define('LOGGED_IN_KEY', '/K{%RclWh_e|4$&ZpS+9Jd|m%*5h#NQ1{k%');

define('NONCE_KEY', '-Aluq5#|Pp:D6EsB8G-os=o${5F +0E/mz,{[b+6[zX4]OnUU');

define('AUTH_SALT', 'X:_<m|djh-O pg-Ld.Ez!?N%v+.Gj|$)rUEHR(JTIq6bwkEEE');

define('SECURE_AUTH_SALT', '0@Pe.l~>SQx~;s}9W>-^GFdFQ zjQUA<+G0z{_S+M');

define('LOGGED_IN_SALT', 'd`U.1inPDll}cH1QcpGs4B;v$)q<wn_L+LIg(>^N>g[!&#038;;t');

define('NONCE_SALT', 't`.LtDKyc9(fQlA@EMrv:%qKQ:eKz+0I*.V,0(@9E~9K!2087pJqs=Q');

2. 拷贝主站wp-config.php中的AUTH_KEY和SECURE_AUTH_KEY到英文站的wp-config.php中,替换相应的行。如果嫌麻烦上面代码全部拷贝到英文站也可以。

3. 在主站和英文站的wp-config.php中创建下面代码,记得去生成一个复杂的随机字符串,不要直接拷贝,主站和英文站的SECRET_SALT值要相同

View Code:

PHPdefine('SECRET_SALT', 'Q$QuHIfQO^(CtrL5D(fcG$miB,fE2]-~::qoB,O_?o|TfgNfQB/x/kv$Tg1Aa7Hf');

4. 在主站和英文站的wp-config.php中创建如下代码

View Code:

$baseurl = 'http://www.yourmainurl.com'; // replace with your main blog url

$cookiehash = md5($baseurl);

define('COOKIEHASH', $cookiehash);define ('AUTH_COOKIE', 'wordpress_'.COOKIEHASH);

define ('SECURE_AUTH_COOKIE', 'wordpress_sec_'.COOKIEHASH);

define ('LOGGED_IN_COOKIE','wordpress_logged_in_'.COOKIEHASH);

define ('TEST_COOKIE', 'wordpress_test_cookie');

5.下载 Root Cookie 插件,分别上传到主博客和子博客的 wp-content/plugins/文件夹中,并都激活

6. 清除浏览器的cookie,选择其中一个网站登录,然后直接访问另一个网站的wp-admin,已经自动登陆了。

声明: 本文由( 魔豆先生 )原创编译,转载请保留链接: 多个wordpress网站共享用户数据的方法

多个wordpress网站共享用户数据的方法:目前有1 条留言

  1. 沙发
    muff:

    :eek: 好高深 找个时间试试

    2014-06-09 17:54 [回复]

发表评论


QQ群互动

Linux系统与内核学习群:194051772

WP建站技术学习交流群:194062106

魔豆之路QR

魔豆的Linux内核之路

魔豆的Linux内核之路

优秀工程师当看优秀书籍

优秀程序员,要看优秀书!

赞助商广告

友荐云推荐