首先我要讲一下关于这件事的经过,在很久很久以前(两年前)我就在想:“🤔我们的网站即然都是WordPress,下面有这么多用户都在用着我们的一些产品,但是每到一个站点都要重新注册一个账号,这很痛苦,说实话这真的不方便”于是就开启了长达两年的各种想解决方案。说真的我没什么技术,都是自学的,单纯爱好写代码或搭建一些很有成就感的东西,今年8月份也是把统一账号的系统做完了,也是自我感觉很成功的一种感觉,我确实很喜欢被代码折磨;所以你们可能也知道…我把WP改成了网盘,改成了多用户可视化建站,改成了OAuth服务器,改成了二级域名解析管理平台,改成了云服务器控制平台。说起来很离谱,我自己都感觉离谱。大家可以期待一下,以后代码完善好都会免费公布出来。
项目的启动
前两天有个小兄弟联系我,说:“哥,你那个登录系统怎么卖的,想购买”后来我答应免费给他用,但后来听了他的需求,感觉并不适用我这套系统,我这套系统是基于OAuth的第三方登录(类似这玩意,我也说不清楚)。他的需求是在他的任意网站的登录表单都可以用一个账号登录(这个我还是说不明白,但是可以参考网易公司的网站或产品,都是用网易邮箱账号登录的,而不是使用XXX授权登录。)于是我就想到了一种可以适用他的这种方案。
解决方案
目前想到的办法是多个WordPress共用一个数据库,适用表前缀作为区分;也就是安装WordPress时看到的“wp_”这个。本次介绍适用三个站做演示,各位大佬也可以使用演示站的数据进行登录和测试。最开始其实打算使用WordPress的网络模式,但是有很多地方不足,很多插件或者主题有冲突,在使用时有的地方还很别手,所以就放弃了。如果大家有什么新的解决办法也可以一起讨论出来。毕竟开源才是贡献,我也很希望帮到大家,因为我一开始就是没有什么人帮我,我真的很感谢张源源当初能在我什么都不懂的时候一点一点带着我写代码,真的非常感谢你们真的感谢!。
搭建开始
首先我再这里以一个数据库名为“ABCDEFG”及内部包含三个WordPress的数据,表单分别为主数据库表前缀“A_”、分站“B_”、分站“C_”。
用户数据我这里存在了A_内。当然你们可以随便弄这个前缀,只要你的站不一样就行。如果你的站没有建在一个数据库内,那么很抱歉,请自行查找修改WordPress数据库表前缀的办法,修改后全部导出,并统一导入到一个数据库内,在您做些时,一定一定要提前做好备份!,全站备份,数据库也记得备份!
用户数据站:a1.fohuis.com 分站:b2.fohuis.com 分站:c3.fohuis.com
目前我创建了用户为“user2@u.cn”密码为“user2pw”各位可以使用这个账号和密码在这三个网站登陆进行测试看看是不是你们需要的效果(网站不一定会在啥时候关闭,反正文章发布后的三个月肯定不会关)。
首先将WordPress安装至一个数据库内,现在您应该有三个表前缀,请您记住这三个表前缀,什么?刚把网站创建完就把表前缀给忘了???好吧,那你的记性和我差不多。如果忘记了请在你网站的目录找到个文件名为“wp-config.php”的文件,那么好请点进去(我这里用宝塔演示)
就是个这个样子的代码,在差不多68行左右,你就能看到,那么这个就是你网站的数据库标前缀,其他网站的也是这样查看,各位大佬应该都知道的。
那么好,到这步你应该已经安装了两个或三个或更多,这个时候只需要你做下一步工作;假如说你有三个网站,你把其中的A_表前缀的网站作为存用户数据的网站,那么这个时候需要你把其他的两个网站甚至更多或者你只建了两个网站,反正就是除了这个网站之外的网站,都需要打开“wp-config.php”这个文件并且需要给他加上一些奇奇妙妙的代码(bushi)正常的代码。
define('CUSTOM_USER_TABLE', 'A_users');
define('CUSTOM_USER_META_TABLE', 'A_usermeta');
这两行代码是将网站的用户数据使用指定表。那么这两行加载哪呢,加载数据库名和密码那个位置上面就是可以的了,什么?你不会加?请复制我的代码至
看到了吗,加载这个位置就可以了,我图片里第20和21行,但是你那里有没有加别的东西我就不知道了,反正就是你的数据库配置代码上方即可。此时你的两个站已经链接完了,可以去分站登陆你主站的管理员账号(诶☝️🤓这个时候你会发现,可以登陆了!但是登陆后台显示没得权限)没得权限怎么办呢,我来教你,首先把网站删了,数据库删了,服务器删了(bushi)
这个时候请您点开您的数据库列表(不会写代码的请安装phpmyadmin)我这里也用这个演示,请先打开宝塔数据库列表,找到你装的数据库,然后点管理
进入后首先找到你的主站数据表,我这里是A_为存用户数据的A_usermeta的表单
点开A_usermeta的表单后你就能看到下面图片的内容,然后点击前面的复制按钮,系统会自动给你跳转到个页面,在这个页面你会看到一大堆表格,如果看不懂的话就会说:“啊这机霸都是啥啊,完全看不懂啊,我该干啥啊,调啥啊”诶!我不告诉你!(装比已起飞)点开后您仅需要按照图二的方式修改即可,将您想给权限的站点的表前缀修改一下即可,如图如A是用户数据,授权给B那么就要这样改。如果你有多个站请按照此方式继续复制并修改即可。如果你有100个站,那么请删除跑路(那就慢慢加吧),这老板纯纯想要要累死人。如果你是老板的话…请当我没说。
如果你已经弄完了,那么你再使用管理员的账号进行登录你就会发现很神奇的事情,登陆成功了!那么你以后管理这些站点时您只需使用一个账号即可管理所有的站点。那么你还会问:“我这网站是多用户的网站啊,要不然我弄这个干嘛,总不可能注册一个我去添加一次吧”有些主题不用管,一样可以用,但是为了不会出现这种问题可以按照下面的步骤去设置(只设置在你存用户的主站内)找到你主题的functions.php文件并打开找到个合适的位置(这个我没法演示了,每个主题都不一样,基本上不报错就没问题)
add_action( 'user_register', 'dup_capabilities' );
add_action('profile_update', 'dup_capabilities');
function dup_capabilities( $user_id ){
//下面这个位置A_,B_,C_改成你所有网站的数据表前缀
$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 );
}
}
}
添加完每次用户注册后都会自动添加每个网站的权限,用户就可以每个站都能登陆了,如果不确定可以在后台添加一个用户,看看其他站能不能登录到后台。
尾声废话
到这里全部搭建过程就已经结束了,有一些代码借鉴了一些别人的东西,但是他的链接总是出问题(严重问题,参杂color那种)所以我这里就不加链接了,但是很感谢你“黄聪”。本文章纯原创,可能话有点多,无用的语序有点多,而且参杂着一种乱七八糟的方言输出,看不懂可以评论,我来改一改。本人没什么文学底蕴,只能用白话文来讲了🤣可能还会出现错别字(我最爱犯的错误)请别在意!
这个站是我最成功的一个平台,也稳定运营了3年,最开始用的是另一个域名,2023年8月换的这个域名目前平台也算是有一部分的活跃用户,也有人在默默的支持我们,网站内的教程类文章(原创)都没有付费的而且基本都和WordPress有关系,B2和Zibll的美化后面也会越来越多。感谢大家的支持!!!
本文编辑编写:Xxiao王同学的基本信息 – DevSkyr
关于DJOT:联合运营 – DevSkyr
如果你也热爱写代码,并且想让自己的代码帮到更多人,您可以加入我们!我们一起创作这一切!