仲介交易 HTTP://www.aliyun.com/zixun/aggregation/6858.html">SEO診斷 淘寶客 雲主機 技術大廳
最近一個客戶要求小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 ) { forea ch( $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,$pref ix.'capabilities', $cap_val ); } } }
本文來源:HTTP://v7v3.com/wpjiaocheng/201307112.html 轉載請注明出處!謝謝合作
最後提下最後一段代碼用法和上面的代碼一樣,現在兩個網站的使用者資料就可以完全互通了。 (PS:以上方法只適用于兩個wordpress網站裝在一個伺服器上且共用一個資料的情況下。 )