วิธีที่ดีที่สุดในการแบ่งปันข้อมูลผู้ใช้ในเว็บไซต์ Wordpress หลาย ๆ


10

ก่อนอื่น Multisite ไม่ใช่สิ่งที่ฉันกำลังมองหา ฉันมี 5 เว็บไซต์ที่ใช้ Wordpress ทั้งหมดในโดเมนแยกต่างหากที่ฉันต้องการเปิดใช้งานบัญชีผู้ใช้ ฉันต้องการข้อมูลผู้ใช้ที่จะแชร์ในเครือข่ายทั้งหมดและเมื่อผู้ใช้สร้างบัญชีพวกเขาจะสามารถเข้าถึงเว็บไซต์อื่น ๆ ได้ทันที สิ่งที่ฉันพยายามจะทำไม่ได้รับการแนะนำโดย Wordpress เมื่อใช้ Multisite:

หากคุณวางแผนที่จะสร้างเว็บไซต์ที่เชื่อมต่อกันอย่างรุนแรงแบ่งปันข้อมูลหรือแบ่งปันผู้ใช้เครือข่ายหลายไซต์อาจไม่ใช่ทางออกที่ดีที่สุด - http://codex.wordpress.org/Before_You_Create_A_Network (ย่อหน้าที่ 1 ประโยคที่ 3)

ฉันได้ลองใช้ "เคล็ดลับผู้ใช้ตารางที่ใช้ร่วมกัน" ตามที่กล่าวถึงที่นี่http://wordpress.org/support/topic/multiple-sites-same-users-howและที่นี่http://xentek.net/articles/528/ Implement-the-wordpress-shared-users-table-trick /และอีกหลายแห่ง ... ปัญหาคือข้อมูลนี้มีอายุ 2-7 ปีและฉันใช้ Wordpress 3.5.1 และ "เคล็ดลับ" นี้ไม่ได้ ดูเหมือนจะใช้งานไม่ได้

ฉันพยายามแทรกรหัสนี้ใน wp-config รอบ ๆ$table_prefixบรรทัด

define('CUSTOM_USER_TABLE', 'wp_users');
define('CUSTOM_USER_META_TABLE', 'wp_usermeta');

เรื่องสั้นสั้นฉันไม่คิดว่าเคล็ดลับนี้จะทำงานได้อีกต่อไปเพราะฉันไม่สามารถเข้าสู่ไซต์ที่สองในด้านผู้ดูแลระบบได้เลย

คำแนะนำใด ๆ เกี่ยวกับวิธีที่ดีที่สุดในการเชื่อมโยงข้อมูลนี้คืออะไร?


1
ฉันไม่ได้รับเหตุผลที่CUSTOM_USER_TABLEจะไม่ทำงาน ... ดูว่ามีบางสิ่งบางอย่างที่นี่: wordpress.stackexchange.com/search?q=CUSTOM_USER_TABLE
brasofilo

เมื่อฉันใช้ CUSTOM_USER_TABLE ผู้ใช้จะได้รับการแบ่งปันระหว่างเว็บไซต์อย่างไรก็ตามในเว็บไซต์ที่สองฉันไม่สามารถเข้าสู่ระบบในฐานะผู้ดูแลระบบได้ ค้นหารอบสำหรับชั่วโมงและหาปลั๊กอินและบทความที่ 2-7 ปีที่ผ่านมานำเก่าให้เชื่อว่าเคล็ดลับนี้ไม่ได้ทำงานใน 3.5.1 ...
เอียน

คำถามก็คือว่าเรื่องนี้ไม่ได้เป็นเคล็ดลับก็หลักคุณลักษณะ ดูเหมือนว่าไม่มีการรายงานข้อผิดพลาดและไม่มีอะไรเกี่ยวข้องปรากฏขึ้นในรายการ [wp-แฮ็กเกอร์] ...
brasofilo

ขอบคุณสำหรับความคิดเห็นของคุณ ฉันสามารถค้นหาคำตอบได้โดยการมองลึกลงไปในสิ่งที่ฉันเห็นในลิงก์ของคุณ ฉันโพสต์โซลูชันของฉันด้านล่าง ขอขอบคุณอีกครั้ง @brasofilo
เอียน

ยอดเยี่ยมจริง ๆ คุณเกือบครอบคลุมวิธีการแชร์ผู้ใช้ทั้งหมด แต่ใช้สถานการณ์ที่แตกต่างกันเล็กน้อยที่นี่ Ive 5 เว็บไซต์เวิร์ดเพรสที่แต่ละเว็บไซต์มีฐานข้อมูลของตัวเอง ฉันจะใช้โซลูชันของคุณเพื่อเชื่อมต่อตารางผู้ใช้ที่แยกจากกันทั้งหมดได้อย่างไรเมื่อผู้ใช้ใหม่ลงทะเบียนในเว็บไซต์ใด ๆ จาก 5 เว็บไซต์เขาสามารถลงชื่อเข้าใช้เว็บไซต์อื่น ๆ ได้ทันทีโดยใช้การลงทะเบียนครั้งเดียว ฉันรู้วิธีที่จะทำให้สำเร็จในฐานข้อมูลเดียวโดยใช้ WPMU แต่ฉันไม่ได้หาวิธีที่จะทำในการติดตั้ง wordpress แยกกัน จะทำให้เห็นคุณค่าของความช่วยเหลือใด ๆ ขอบคุณ

คำตอบ:


8

โอเคก่อนอื่นฉันรู้สึกเหมือนคนงี่เง่าถึงแม้ว่าจะเป็นบทความที่กล่าวถึงเรื่องนี้ส่วนใหญ่แล้วก็ไม่ได้กล่าวถึงรายละเอียดที่สำคัญมากในการทำงานนี้ คำตอบคือคุณต้องตั้งค่าการอนุญาตสำหรับผู้ดูแลระบบอย่างน้อยหนึ่งรายในฐานข้อมูล ข้อมูลนี้สามารถพบได้ใน Codex ที่นี่: http://codex.wordpress.org/Editing_wp-config.php#Custom_User_and_Usermeta_Tables

หลังจากคุณตั้งค่าไฟล์ wp-config.php เป็นสิ่งจำเป็นที่คุณต้องทำการเปลี่ยนแปลงกับตาราง usermeta หลัก (ในกรณีของฉัน wp_usermeta) ฟิลด์แถว wp_capabilities และคอลัมน์ meta_value ทำสิ่งนี้ผ่าน phpMyAdmin

หมายเหตุ:ทำอย่างนี้เพื่อให้ผู้ดูแลระบบผู้ใช้อย่างน้อยหนึ่งคนเข้าสู่ระบบคุณสามารถปรับบทบาทผู้ใช้ / ผู้ดูแลระบบอื่น ๆ ทั้งหมดจากแบ็กเอนด์เมื่อคุณเข้ามา

ภาพหน้าจอของสิทธิ์ผู้ใช้ที่จะเปลี่ยน

สำหรับแต่ละเว็บไซต์ที่สร้างขึ้นจำเป็นต้องมีคำนำหน้าไซต์ใหม่ที่กำหนดบทบาทผู้ใช้ของผู้ดูแลระบบ

ในกรณีของฉันเนื่องจากฉันเพิ่งได้รับการทำงานใน 2 เว็บไซต์ในขณะนี้ดูเหมือนว่านี้:

a:1:{s:13:"administrator";s:1:"1";}
tbs_capabilities = a:1:{s:13:"administrator";s:1:"1";}

สกรีนช็อตของค่า wp_usermeta

บรรทัดแรกตั้งค่าการอนุญาตสำหรับคำนำหน้าตารางเริ่มต้น (ในกรณีนี้ wp_) และบรรทัดที่สองกำหนดสิทธิ์สำหรับเว็บไซต์ที่สอง (ในกรณีนี้ด้วยคำนำหน้า tbs_)

ขอบคุณ brasofilo สำหรับความคิดเห็นที่ชี้ให้ฉันขุดอีกเล็กน้อยเพื่อแก้ปัญหาของฉันในที่สุด!

ฉันหวังว่าคำตอบนี้จะช่วยให้คนอื่นที่มีปัญหาฉันเหมือนกัน


ไม่เคยใช้คุณสมบัตินี้ แต่ดีใจที่รู้ว่ามีเคล็ดลับเล็ก ๆ น้อย ๆ นี้ที่จะทำให้มันใช้ได้;) เขียนดีขึ้น +1
brasofilo

1
ขอบคุณคุณควรพูดถึงบทเรียนนี้อย่างแน่นอน!
Mircea Sandu

2

เมื่อใช้งานร่วมกัน wp_users และ wp_meta มีปัญหาอื่นติดตั้ง WordPress อื่น ๆ ไม่รู้จักผู้ใช้ แต่มันไม่รู้จักบทบาทของผู้ใช้ที่มาจากเว็บไซต์อื่นบทบาทแสดงขึ้นเป็นไม่ได้กำหนด

ดังนั้นคุณจึงแก้ไข wp-config.php ของคุณได้ตามต้องการ:

define('CUSTOM_USER_TABLE', 'someprefix_users');
define('CUSTOM_USER_META_TABLE', 'someprefix_usermeta');

ฉันคิดว่าวิธีที่ง่ายที่สุดในการทำเช่นนี้โดยไม่ต้องแก้ไขฐานข้อมูลคือการใช้ wp internals เมื่อเข้าสู่ระบบเป็นไปได้ที่จะกำหนดบทบาท สมมติว่าเราต้องการบทบาทผู้สนับสนุนสำหรับทุกคนและบทบาทผู้ดูแลระบบสำหรับผู้ใช้ 'ซูเปอร์แมน'

function check_user_role($user_login, $user) {
  if ( $user_login == 'superman' ) {
     $user->add_role('administrator');
     } else {
     $user->add_role('contributor');
  }
}

// the action fired on login
add_action('wp_login', 'check_user_role', 10, 2);

ดังนั้นผู้ใช้ที่มาจากเว็บไซต์เริ่มต้นจะได้รับบทบาท 'ผู้สนับสนุน' เมื่อพวกเขาลงชื่อเข้าใช้

  • คุณสามารถลบการตรวจสอบผู้ใช้หลังจากที่คุณเข้าสู่ระบบด้วยผู้ใช้ผู้ดูแลระบบ
  • ผู้ใช้อาจมีมากกว่าหนึ่งบทบาทความสามารถมีความสำคัญ

http://codex.wordpress.org/Class_Reference/WP_User


0

ฉันต้องสร้างแถวใหม่:

meta_key='tbs_capabilities' meta_value='a:1:{s:13:"administrator";b:1;}'

user_id=1และ วิธีที่คุณอธิบายไม่ทำงาน


1
ในคำตอบข้างต้น "tbs" เป็นคำนำหน้าของเว็บไซต์ WordPress ที่สองที่ฉันติดตั้ง ดังนั้นแทนที่จะเป็นตาราง wp_posts พวกเขาจะเป็น tbs_posts หากคุณไม่ได้ตั้งค่า $ table_prefix = 'tbs_' ไว้อย่างชัดแจ้ง มันจะไม่ทำงาน
เอียน
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.