多个WordPress网站之间共享用户数据实现方法

作者 : OKMG 发布时间: 2020-05-11 文章热度:55 共2597个字,阅读需7分钟。 本文内容有更新 字体:
  • 文章介绍
  • 网站建设

    目 录

    wordpress为网站系统提供了相同的数据表结构,为快速实现多个WordPress网站之间共享用户数据提供了可能。wordpress如何实现如网易通行证等大站一样的共享用户登录呢?只需要将需要共享的数据库共用即可,我们这里只需要共享_user与_usermeta表,下面是完整实现过程。

    安装web

    首先,准备两个域名及web环境,我的测试环境是宝塔。

    主站A

    • 域名:a.test.com
    • 数据库名称:test
    • 数据库用户:mytest
    • 数据库用户密码:test123
    • 数据表前缀:a_

    从站B

    • 域名:b.test.com
    • 数据库名称:test
    • 数据库用户:mytest
    • 数据库用户密码:test123
    • 数据表前缀:b_

    先安装A站,使用上述A站配置信息,安装完毕后,再安装B站,B站也使用上述信息。注意:为了实现数据共享,我们必须将两个站的数据表都放在同一个数据库中,上面我用的test数据库。

    修改wordpress配置

    为实现共用用户数据,我们必须让两个站使用的数据表都为a_user与a_usermeta。或者都使用b_user与b_usermeta,我这里使用的A作为主站,所以我需要把B站使用的b_user与b_usermeta数据表改为使用a_user与a_usermeta数据表。

    打开B站wordpress根目录下的wp_config.php配置文件,在其中加入如下配置:

    define('CUSTOM_USER_TABLE', 'a_users');
    define('CUSTOM_USER_META_TABLE', 'a_usermeta');

    这两句配置重新声明了_user与_usermeta数据表的名称,这里将其改为需要共享数据的表名称,我是用的是A站的用户数据。

    到此,你的A、B两站用户数据共享已经完成,都可以使用A站点的用户数据注册登录,但wordpress在_usermeta表中有对用户权限的记录,到这一步,你的B站虽然可以使用A站的用户数据登录,但不能访问后台,访问会提示用户权限不够。

    自动添加用户权限

    当你完成上面的步骤时,你的a_usermeta数据表中,并没有记录用户对B站点的访问权限,为了使A站点的管理员用户能拥有B站点的管理权限,我们需要在a_usermeta数据表中插入如下权限记录:

    INSERT INTO `test`.`a_usermeta` (`umeta_id`, `user_id`, `meta_key`, `meta_value`) VALUES (NULL, '1', 'b_capabilities', 'a:1:{s:13:"administrator";s:1:"1";}');

    在这里解释下,在_usermeta数据表中meta_key的值为_capabilities的记录项就是记录的用户权限,其前缀代表了权限是哪个站点的。由于我的管理员账号是建站时建立的,所以user_id为1。administrator表示管理员权限

    通过上面的mysql命令,插入用户对B站点的权限后,我们就可以正常访问B站的后台了。注意:记得清理cookies!

    如果不会MySQL,你也可以使用phpmyadmin使用鼠标点击a_usermeta数据表中meta_key值为a_capabilities记录项前面的复制链接,phpmyadmin会自动跳转到插入功能并填入相应值,你只需要修改前缀再点击执行即可。

    这里我们使用的是手动的方式来赋予用户对B站点的访问权限,我们不可能手动为每一位用户赋予权限,那么我们可以使用如下代码来实现注册时自动赋予权限。

    //设置主站的前缀,其它网站都共享该网站的用户数据表
    $main_prefix = 'a_';
    
    //设置子站的前缀,例如有两个子站,前缀分别为wpen_和wpcn_
    $addi_prefixs = array('b_','c_');
    
    //添加功能到用户注册的钩子里
    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 );
    
    }
    }
    }
    }

    或者使用下面的代码,也行。

    add_action( 'user_register', 'dup_capabilities' );
    add_action('profile_update', 'dup_capabilities');
    function dup_capabilities( $user_id ){
    //在这里设置数据表前缀,不分主站子站,全部写上即可。
    $prefixs = array('a_','b_','c_');
    global $table_prefix;
    $cap_val = get_user_meta( $user_id, $table_prefix.'capabilities',true);
    if( !empty( $cap_val ) ) {
    foreach( $prefixs as $prefix ){
    if( $prefix != $table_prefix )
    update_user_meta( $user_id, $prefix.'capabilities', $cap_val );
    }
    }
    }

    上面的代码仅能自动为以后的用户设置权限,并不能给以前的用户设置权限,所以如果需要为以前的用户设置权限,你需要获取所有用户id,然后循环执行上面插入权限的MySQL。

    如果你的用户注册数据中还有别的字段,那么你可能需要参考上面的代码,将数据写入其中。

    注意:本文实现的wordpress共享用户数据,仅能共享注册登录,不能实现自动登录。比如如果在A站点登录用户A,当你切换到B站点时,并不会自动为你登录A用户,当然你可以手动登录。出现这种问题的原因是,A、B两个站的域名不同,cookies不能实现跨域。

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    购买的源码有问题 怎么办?
    郑重声明:仅限于商业源码可以提供技术支持且保证源码安全可用。 其余源码仅供参考学习。 而且源码在逐步下架。预计两个月内,本站所有源码 全部都是商用源码。
    买完的源码不想要了,可以退款么?
    非常抱歉,因为源码的可复制性和传播性。所有源码一经出售不得退款。 并非我们这样,所有的IT开发行业都是如此。
    源码没有我想要的,怎么办?
    非常不好意思呦!因为优秀的成品源码是有限的,如果平台上没有符合您需求的源码,可以联系OKMG客服解决,定制或者二开。 不过为了给大家一个良好的体验,平台发布的所有商业源码都是我们认可,且测试过的。 优秀才推荐,优秀才出售。
    我有源码,可以发布到平台上么?
    可以的,如果你是正版作者 可以联系我们。 但盗版勿扰。
    我是作者,你们家源码有我的盗版怎么办?
    非常抱歉,由于大部分源码都是互联网上收集的。收集到的源码 其中一部分 我们已经找到了作者 并且替换为正版代理。剩余的盗版 有些是因为时间紧 还没整理完成,还有部分是没有找到原作者的联系方式。 可以联系平台客服提供软著或证据 我们五分钟内下架处理。也可以与我们合作。 OKMG向正版致敬! 正因为我们是同行,所以我们清楚正版的创作是多么艰辛。
    芒果源码,一个精品商业网站源码分享平台 WWW.OKMG.CN 1. 本站所有资源来源于用户上传和网络,均不允许转载,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除! 3. 如发现会员转载本站资源文章,本站有权封禁会员账号! 4. 不得使用于非法商业用途,不得违反国家法律。否则后果自负! 5. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 6. 如有链接无法下载、失效或广告,请联系管理员处理! 7. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 8. 如遇到加密压缩包,默认解压密码为"www.okmg.cn",如遇到无法解压的请联系管理员! 9.本站客服:925296647
    芒果源码 » 多个WordPress网站之间共享用户数据实现方法

    发表评论

    发表评论

    售后服务:

    • 售后服务范围 1、商业模板使用范围内问题免费咨询
      2、源码安装、模板安装(一般 ¥50-300)服务答疑仅限SVIP用户
      3、单价超过200元的模板免费一次安装,需提供服务器信息。
      付费增值服务 1、提供dedecms模板、WordPress主题、discuz模板优化等服务请详询在线客服
      2、承接 WordPress、DedeCMS、Discuz 等系统建站、仿站、开发、定制等服务
      3、服务器环境配置(一般 ¥50-300)
      4、网站中毒处理(需额外付费,500元/次/质保三个月)
      售后服务时间 周一至周日(法定节假日除外) 9:00-23:00
      免责声明 本站所提供的模板(主题/插件)等资源仅供学习交流,若使用商业用途,请购买正版授权,否则产生的一切后果将由下载用户自行承担,有部分资源为网上收集或仿制而来,若模板侵犯了您的合法权益,请来信通知我们(Email: meng@yimiaonet.com),我们会及时删除,给您带来的不便,我们深表歉意!

    Hi, 如果对这款程序不满意,还可以联系我们定制开发哟!

    联系OKMG技术专家

    @OKMG
    https://www.okmg.cn

    扫码关注「OKMG」微信公众号

    776+

    总资源

    776+

    实用教程

    839+

    本站会员

    1089天+

    累计服务

    330601次+

    总访问次数

    01:52:18