wordpress二次开发教程手记:多站点的用户数据共享

  最近一个客户要求小V帮他们公司站点做一个英文版本,并且要求中文版和英文版两个站点的用户数据可以互通而且不影响站点的正常运行。好吧,开始蛋疼的折腾,首先看了下wordpress的官方文档:《wordpress数据结构图》发现wordpress的用户数据表(wp_users和wp_usermeta)是相对独立的,那么我们就可以直接将两个站点的用户数据库共享即可,不用用户数据考虑会对两个站点中其他数据所造成的影响了。下面小V来说说解决方法:

  假设11545.html">我们有两个wordpress站点,一个为cn.v7v3.com(数据表前缀为v7v3cn_)另一个为en.v7v3.com(数据表前缀为v7v3en_),我们将cn.v7v3.com作为主站点,将en.v7v3.com作为主站的一个英文版的副站点。

  首先打开en.v7v3.com的wp_config.php文件,并加入以下代码:

  define('CUSTOM_USER_TABLE', 'v7v3cn_users'); //v7v3cn_为主站点的数据库前缀

  define('CUSTOM_USER_META_TABLE', 'v7v3cn_usermeta');

  加入以上代码后两个站点之间的用户数据就实现了初步的互通,但是如果用主站的用户去登录副站点会提示没有足够的权限。原因是因为主站储存的用户权限值是以v7v3cn来开头的,以主站的管理员为例,管理员用户ID为1,角色是administrator,则表中就有这样一条记录:

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

  而英文副站点的数据库中却没有以v7v3en_开头的权限值记录,所以造成权限不够的提示。解决方法是运行一下SQL语句:

  //向数据库中添加v7v3en_开头的权限记录值

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

  这样做仅仅使用户id为1的管理员可以正常登陆这两个网站,如果创建了新的用户,无论是管理员还是普通用户,都会被提示权限不足,解决方法是在用户的注册钩子添加一个SQL数据库操作:

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

  $main_prefix = 'v7v3cn_';

  //设置子站的前缀,前缀为v7v3en

  $addi_prefixs = array('v7v3en_');

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

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

  将以上代码做成一个小插件或者添加到主题的functions.php文件,这样就一劳永逸了。小V在本地测试时用的是wordpress3.4版本,未出现任何问题,但是在客户的站点中运用却报错了,查了下原因,原来客户那边的站点用的是wordpress3.5版的,3.5中代码与3.4不太一样,所以3.5或更高版本请使用以下代码:

  add_action( 'user_register', 'dup_capabilities' );

  add_action('profile_update', 'dup_capabilities');

  function dup_capabilities( $user_id ){

  //在这里设置数据表前缀,不分主站子站,全部写上即可。

$prefixs = array('v7v3cn_','v7v3en_'); 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 ); } } }

  本文来源:http://v7v3.com/wpjiaocheng/201307112.html 转载请注明出处!谢谢合作

  最后提下最后一段代码用法和上面的代码一样,现在两个站点的用户数据就可以完全互通了。(PS:以上方法只适用于两个wordpress站点装在一个服务器上且共用一个数据的情况下。)

时间: 2024-09-20 20:59:30

wordpress二次开发教程手记:多站点的用户数据共享的相关文章

Discuzx1.5二次开发教程

Discuzx1.5二次开发 教程,在准备开发Discuzx1.5时,我们在安装好DiscuzX1.5之后,进行以下简单配置,可大幅度提高DiscuzX1.5的二次开发效率: 1.下载官方提供的调试包,解压后上传到DiscuzX1.5 安装目录source/function/目录下,然后再config/config_global.php文件中$_config = array();后加入 $_config['debug'] = 1; 这样在IE浏览器下,就可以看到程序执行的变量.缓存.SQL.包含

wordpress二次开发和thinkphp开发哪个好学一点

问题描述 wordpress二次开发和thinkphp开发哪个好学一点 我想做些类似于 星座测试 的小应用,选用wordpress做模板插件好 还是用thinkphp好些? 两者哪个资料丰富,好学一些 解决方案 wordpress估计实现起来比较简单的吧..

织梦CMS二次开发教程 实现图集缩略图的分页样式

中介交易 SEO诊断 淘宝客 云主机 技术大厅 首先织梦CMS系统不用过多介绍了,织梦好,好之梦! 织梦CMS5.7版本里默认自带有三种图集样式,模板名称分别为article_image.htm.article_image_cl.htm(新浪样式).article_image_new.htm(这个是5.7才有的图文幻灯样式).最近在做女人说的图集模板时发现dede默认的图集模板无法像文章一样实现分页样式,多次问度娘.谷哥均无果,于是仔细的对织梦的文件研究了一下发现织梦是可以实现这种样式的(如下图

wordpress二次开发:站外以HTML的形式调用wordpress文章

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 小V在帮客户开发wordpress站点时经常会遇到各种要求,这次帮一个客户开发项目时,客户要求帮他开发的站点的文章能在其他网站调用,并且要以HTML的形式来调用不能使用js,说是做链轮什么的.没办法顾客就是上帝,继续折腾呗.下面来说下实现方法,首先在wordpress的根目录新建一个html_post.php文件,记住是需要向外调用文章的wo

wordpress个人主题开发教程

为什么要使用 WordPress 主题 WordPress 主题由一系列文件和 CSS 样式表构成,构成了一个美丽的 WordPress 网站.每个主题都是不同的, 这样WordPress用户就可以随时更改 WordPress 网站的外观. 你也许想为自己开发 WordPress 主题,或者制作公开发行的的主题.但是除了这个为什么要自己制作主题呢? 创建自己独特的 WordPress 主题外观. 利用模板, 模板标签, 和 WordPress循环 来产生不同的效果. 为了产生不同的效果,比如在c

百度编辑器二次开发常用手记整理小结_网页编辑器

创建自定义编辑器: 复制代码 代码如下: //引入editor_config.js,editor_api.js,ueditor.css文件,然后在body中创建编辑器实例与父容器 <div id="myEditor"></div> <script type="text/javascript"> var editorOption = { toolbars:[['FullScreen', 'Source', 'Undo', 'Redo

destoon二次开发入门示例_php实例

Destoon基于PHP+MySQL的开源B2B(电子商务)行业门户的首选解决方案.本文就Destoon的二次开发简述如下: 一.初始化系统 包含系统根目录下的common.inc.php即可初始化系统. 例如在站点根目录下创建一个hello.php,代码如下: <?php require 'common.inc.php'; echo 'Hello World'; ?> 二.编写逻辑 系统初始化之后,就可以在php文件里编写逻辑代码,同时也可以调用系统内置的变量.函数和类了. 示例代码如下:

destoon二次开发笔记 数据库 模板制作

入门代码示例 一.初始化系统 包含系统根目录下的common.inc.php即可初始化系统. 例如在站点根目录下创建一个hello.php. 示例代码:  代码如下 复制代码 <?php require 'common.inc.php'; echo 'Hello World'; ?> 二.编写逻辑 系统初始化之后,就可以在php文件里编写逻辑代码,同时也可以调用系统内置的变量.函数和类了. 示例代码:  代码如下 复制代码 <?php require 'common.inc.php';

php版微信小店API二次开发及使用示例_php技巧

本文实例讲述了php版微信小店API二次开发及使用方法.分享给大家供大家参考,具体如下: 1. weixiaodian.php页面: <?php class wXd { public $AppID = ""; public $AppSecret = ""; public $OutPut = ""; public $AccessToken = ""; public $ID = ""; public $H