WordPress
หนึ่งในฟีเจอร์ที่ WordPress จัดการได้ดีตั้งแต่ติดตั้งเสร็จคือระบบ User Roles และ Permissions ซึ่งช่วยให้คุณสามารถมอบหมายงานให้ทีมได้อย่างปลอดภัย โดยไม่ต้องกังวลว่าผู้ใช้จะเผลอลบหน้าสำคัญ หรือเปลี่ยนธีมโดยไม่ได้รับอนุญาต บทความนี้จะพาคุณทำความเข้าใจ Role ทั้ง 5 แบบที่มีมาตั้งต้น วิธีเพิ่มผู้ใช้ และการสร้าง Custom Role สำหรับเว็บที่มีความต้องการพิเศษ
WordPress User Roles มีกี่แบบ?
WordPress มี Role พื้นฐาน 5 ระดับที่ติดมากับระบบ แต่ละ Role มี Capability (สิทธิ์) ที่แตกต่างกันชัดเจน:
1. Administrator
สิทธิ์สูงสุดในระบบ สามารถทำทุกอย่างได้ตั้งแต่ติดตั้ง Plugin, เปลี่ยน Theme, จัดการ User ทุกคน, แก้ไขโค้ด PHP ใน Theme Editor, ตั้งค่าทั่วไปของเว็บ และลบหน้าหรือโพสต์ใด ๆ ก็ได้ ควรมอบ Role นี้เฉพาะเจ้าของเว็บหรือผู้ดูแลระบบที่ไว้วางใจได้เท่านั้น
2. Editor
จัดการ Content ได้ครบถ้วน ทั้งสร้าง แก้ไข ลบ และเผยแพร่โพสต์ของตัวเองและของผู้อื่น อนุมัติ Comment และจัดการหมวดหมู่ได้ แต่ไม่สามารถติดตั้ง Plugin หรือเปลี่ยน Theme ได้ เหมาะสำหรับ บรรณาธิการหรือ Content Manager ของทีม
3. Author
เขียน แก้ไข และเผยแพร่โพสต์ของตัวเองได้อย่างอิสระ อัปโหลดรูปภาพได้ แต่ไม่สามารถแก้ไขโพสต์ของผู้อื่นได้ เหมาะสำหรับนักเขียนประจำที่ต้องการอิสระในการเผยแพร่บทความโดยไม่ต้องรอผู้ดูแล
4. Contributor
เขียนและแก้ไขโพสต์ของตัวเองได้ แต่ไม่สามารถเผยแพร่เองได้ ต้องรอ Editor หรือ Administrator อนุมัติก่อน และไม่สามารถอัปโหลดรูปภาพได้ เหมาะสำหรับนักเขียน Guest หรือผู้ร่วมเขียนที่ต้องมีคนตรวจสอบก่อนเผยแพร่
5. Subscriber
สิทธิ์ต่ำสุด สามารถเข้าสู่ระบบและดูโพสต์เท่านั้น แก้ไขข้อมูล Profile ของตัวเองได้ ไม่มีสิทธิ์สร้างหรือแก้ไขเนื้อหาใด ๆ เหมาะสำหรับสมาชิกที่ต้องการ Login เพื่อดูเนื้อหา Premium หรือสมาชิก Newsletter
วิธีเพิ่มผู้ใช้ใหม่และกำหนด Role ผ่าน WordPress Dashboard
การเพิ่มผู้ใช้ใหม่ทำได้ง่ายมากผ่านหน้า Dashboard ของ WordPress โดยไม่ต้องใช้ Command Line หรือแก้ไขฐานข้อมูล:
- เข้าสู่ WordPress Dashboard ในฐานะ Administrator
- ไปที่เมนู Users > Add New User
- กรอก Username, Email, First Name, Last Name
- ตั้ง Password (หรือใช้ Password ที่ระบบสร้างให้อัตโนมัติ)
- เลือก Role จาก Dropdown ตามความเหมาะสม
- ติ๊ก "Send the new user an email about their account" ถ้าต้องการส่ง Email แจ้งเตือน
- คลิก Add New User
วิธีเปลี่ยน Role ของผู้ใช้ที่มีอยู่แล้ว
หากต้องการเปลี่ยน Role ของผู้ใช้เดิม เช่น เลื่อน Contributor เป็น Author หลังจากทำงานได้ดี:
- ไปที่ Users > All Users
- คลิกชื่อผู้ใช้ที่ต้องการแก้ไข หรือ Hover แล้วคลิก Edit
- เลื่อนลงมาที่ส่วน Role แล้วเลือก Role ใหม่จาก Dropdown
- คลิก Update User เพื่อบันทึก
นอกจากนี้ยังสามารถเปลี่ยน Role ของหลายคนพร้อมกันได้ โดยติ๊กเลือกผู้ใช้หลายคน เลือก "Change role to..." จาก Bulk Actions แล้วคลิก Apply
ตาราง Capability สรุปสิทธิ์แต่ละ Role
เพื่อให้เห็นภาพชัดขึ้น นี่คือ Capability สำคัญ ๆ และ Role ที่มีสิทธิ์:
- manage_options (ตั้งค่าเว็บ) — Administrator เท่านั้น
- install_plugins (ติดตั้ง Plugin) — Administrator เท่านั้น
- edit_others_posts (แก้โพสต์คนอื่น) — Administrator, Editor
- publish_posts (เผยแพร่โพสต์) — Administrator, Editor, Author
- upload_files (อัปโหลดไฟล์) — Administrator, Editor, Author
- edit_posts (แก้โพสต์ตัวเอง) — ทุก Role ยกเว้น Subscriber
- read (ดูเนื้อหา) — ทุก Role รวมถึง Subscriber
การสร้าง Custom Role ด้วย Code ใน functions.php
สำหรับเว็บที่ต้องการ Role พิเศษ เช่น "Shop Manager" ที่จัดการสินค้าได้แต่ไม่แก้ไขบทความ หรือ "SEO Manager" ที่แก้ได้เฉพาะ Meta Tag สามารถสร้าง Custom Role ได้ผ่านโค้ดใน functions.php ของ Theme
วิธีเปิดแก้ไข functions.php ผ่าน Dashboard: ไปที่ Appearance > Theme File Editor แล้วเลือก functions.php (หรือใช้ File Manager ใน cPanel ก็ได้)
// สร้าง Custom Role ชื่อ "content_manager"
// ใส่ใน functions.php ของ Theme ที่ใช้งาน
function create_content_manager_role() {
add_role(
'content_manager', // Role key (ห้ามมีช่องว่าง)
'Content Manager', // ชื่อที่แสดงใน Dashboard
array(
'read' => true, // ดูเนื้อหาได้
'edit_posts' => true, // แก้โพสต์ตัวเองได้
'edit_others_posts' => true, // แก้โพสต์คนอื่นได้
'publish_posts' => true, // เผยแพร่ได้
'upload_files' => true, // อัปโหลดรูปได้
'manage_categories' => true, // จัดการหมวดหมู่ได้
'delete_posts' => false, // ลบโพสต์ไม่ได้
'install_plugins' => false, // ติดตั้ง Plugin ไม่ได้
)
);
}
add_action( 'init', 'create_content_manager_role' );
remove_role('content_manager') แล้วค่อยสร้างใหม่เพิ่ม Capability ให้ Role ที่มีอยู่แล้ว
นอกจากสร้าง Role ใหม่ทั้งหมด ยังสามารถเพิ่ม Capability เฉพาะให้ Role ที่มีอยู่ได้ เช่น ต้องการให้ Editor จัดการ Widget ได้:
// เพิ่ม Capability "edit_theme_options" ให้ Editor
// ใส่ใน functions.php
function add_capability_to_editor() {
$role = get_role( 'editor' );
if ( $role ) {
$role->add_cap( 'edit_theme_options' ); // จัดการ Widget/Menu
$role->add_cap( 'export' ); // Export ข้อมูลได้
}
}
add_action( 'init', 'add_capability_to_editor' );
// ถอด Capability คืน (ถ้าต้องการ)
function remove_capability_from_editor() {
$role = get_role( 'editor' );
if ( $role ) {
$role->remove_cap( 'edit_theme_options' );
}
}
// add_action( 'init', 'remove_capability_from_editor' );
Plugin ที่ช่วยจัดการ User Roles ได้สะดวกขึ้น
หากไม่ต้องการแก้โค้ดด้วยตนเอง มี Plugin ฟรีที่ช่วยจัดการ User Roles ผ่าน UI ได้สะดวก:
- User Role Editor — Plugin ยอดนิยม ติดตั้งฟรี จัดการ Capability ผ่าน Checkbox ใน Dashboard ได้เลย
- Members — ครบฟีเจอร์ทั้ง Role Manager, Content Restriction และ Widget Visibility
- PublishPress Capabilities — เหมาะสำหรับทีมใหญ่ที่ต้องการควบคุมสิทธิ์ละเอียด รองรับ WooCommerce Role
ติดตั้ง Plugin เหล่านี้ได้ผ่าน Plugins > Add New Plugin ใน Dashboard ค้นหาชื่อ Plugin แล้วคลิก Install Now แล้ว Activate
Best Practice การจัดการ User Roles ให้ปลอดภัย
- ใช้ Principle of Least Privilege — ให้สิทธิ์น้อยที่สุดเท่าที่จำเป็นสำหรับงานของแต่ละคน
- ไม่ควรมี Administrator หลายคนโดยไม่จำเป็น ให้ใช้ Editor แทนถ้าไม่ต้องการจัดการ Plugin/Theme
- ตรวจสอบ User List เป็นระยะ ลบบัญชีที่ไม่ได้ใช้งานแล้วออก
- เปิดใช้ Two-Factor Authentication (2FA) สำหรับบัญชี Administrator ทุกคน
- ใช้ Activity Log Plugin เช่น WP Activity Log เพื่อติดตามว่าใครทำอะไรบ้าง
- ตั้ง Password แข็งแรงและบังคับ Reset Password หากสงสัยว่าบัญชีถูกบุกรุก
ตรวจสอบว่า User Roles ทำงานถูกต้อง
หลังจากตั้งค่า Role เรียบร้อยแล้ว ควรตรวจสอบว่า Capability ทำงานถูกต้องด้วยวิธีต่าง ๆ ต่อไปนี้ผ่าน WordPress Dashboard หรือ phpMyAdmin ที่เข้าถึงได้จาก cPanel:
-- ตรวจสอบ User และ Role ปัจจุบันใน phpMyAdmin (cPanel → phpMyAdmin)
-- เลือก Database ของ WordPress แล้วรัน Query นี้:
-- ดู Role ของผู้ใช้ทุกคน
SELECT user_login, user_email, meta_value AS role
FROM wp_users u
JOIN wp_usermeta m ON u.ID = m.user_id
WHERE m.meta_key = 'wp_capabilities'
ORDER BY user_login;
-- ตรวจสอบ User ที่ไม่มี Role (อาจเกิดจาก Plugin Error)
SELECT user_login, user_email
FROM wp_users
WHERE ID NOT IN (
SELECT user_id FROM wp_usermeta
WHERE meta_key = 'wp_capabilities'
);
wp_ (เช่น abc_) ให้เปลี่ยน wp_users และ wp_usermeta เป็น abc_users และ abc_usermeta ตาม prefix จริงที่ตั้งตอนติดตั้ง WordPress ซึ่งดูได้จากไฟล์ wp-config.php บรรทัด $table_prefixแก้ปัญหาที่พบบ่อย
Error: "Sorry, you are not allowed to access this page."
เกิดขึ้นเมื่อผู้ใช้พยายามเข้าถึงหน้าที่ไม่มีสิทธิ์ เช่น Contributor พยายามเข้า Plugins หรือ Editor พยายามเข้า Settings วิธีแก้คือตรวจสอบว่า Role ที่กำหนดให้ผู้ใช้นั้นถูกต้องหรือไม่ โดยไปที่ Users แล้วดู Role ของผู้ใช้คนนั้น ถ้า Role ถูกต้องแล้วแต่ยังติด ลอง Deactivate Plugin ด้านความปลอดภัยชั่วคราวเพื่อดูว่า Plugin นั้น Block การเข้าถึงหรือไม่
Error: Custom Role ที่สร้างด้วย add_role() หายไปหลัง Update Theme
add_role() บันทึก Role ลง Database ดังนั้นปกติไม่ควรหายเมื่อ Update Theme อย่างไรก็ตามถ้า Theme ใช้ Child Theme และโค้ดอยู่ใน Parent Theme อาจหายได้ วิธีป้องกันที่ดีที่สุดคือสร้าง Must-Use Plugin โดยวางไฟล์ .php ไว้ในโฟลเดอร์ wp-content/mu-plugins/ แทน ซึ่งโหลดเสมอโดยไม่ขึ้นกับ Theme
Error: ผู้ใช้มี Role แต่ไม่สามารถ Upload รูปได้
Capability ที่ควบคุมการ Upload คือ upload_files ซึ่ง Author ขึ้นไปมีโดย Default แต่ Contributor ไม่มี ถ้าต้องการให้ Contributor อัปโหลดได้ ให้เพิ่ม Capability ด้วยโค้ดใน functions.php:
function allow_contributor_upload() {
$role = get_role( 'contributor' );
if ( $role ) {
$role->add_cap( 'upload_files' );
}
}
add_action( 'init', 'allow_contributor_upload' );
Error: Role Dropdown หายไปในหน้า Add/Edit User
มักเกิดจาก Plugin ที่จัดการ User Roles ขัดแย้งกัน หรือ Custom Code ใน functions.php มี Syntax Error ลอง Deactivate Plugin ทั้งหมดชั่วคราว แล้วดูว่า Dropdown กลับมาหรือไม่ จากนั้น Activate ทีละตัวเพื่อหา Plugin ที่เป็นปัญหา
Error: Subscriber สามารถเห็นหน้า Dashboard ได้ (ไม่ต้องการ)
โดย Default WordPress ให้ทุก Role เข้า Dashboard ได้ หากต้องการ Redirect Subscriber ออกจาก Dashboard ทันทีหลัง Login ให้เพิ่มโค้ดนี้ใน functions.php:
function redirect_subscriber_after_login( $redirect_to, $request, $user ) {
if ( isset( $user->roles ) && is_array( $user->roles ) ) {
if ( in_array( 'subscriber', $user->roles ) ) {
return home_url(); // Redirect ไปหน้าแรกแทน
}
}
return $redirect_to;
}
add_filter( 'login_redirect', 'redirect_subscriber_after_login', 10, 3 );
คำถามที่พบบ่อย
Q: WordPress Multisite มีการจัดการ Role ต่างจากเว็บปกติหรือไม่?
A: มีความแตกต่างกัน ใน WordPress Multisite จะมี Role พิเศษเพิ่มคือ Super Administrator ซึ่งมีสิทธิ์จัดการทุก Site ใน Network ส่วน Administrator ปกติจะมีสิทธิ์เฉพาะ Site ของตัวเอง ไม่สามารถแตะ Site อื่นได้ การตั้งค่า Role ทำได้ทั้งในระดับ Network Admin และในแต่ละ Site แยกกัน
Q: ถ้าลืมว่าให้ใคร Role อะไรไว้บ้าง จะเช็คได้อย่างไร?
A: เช็คได้ง่ายที่สุดผ่าน Users > All Users ใน Dashboard ซึ่งจะแสดง Column "Role" ของทุกคน นอกจากนี้ยังสามารถ Filter ตาม Role ได้โดยคลิก Link Role ที่อยู่ด้านบนตาราง (เช่น Administrator, Editor) เพื่อดูเฉพาะผู้ใช้ที่มี Role นั้น ๆ หรือใช้ phpMyAdmin ผ่าน cPanel เพื่อ Query ตรงจากฐานข้อมูลตามที่แสดงในส่วนตรวจสอบข้างต้น
Q: WooCommerce เพิ่ม Role อะไรให้ WordPress บ้าง?
A: เมื่อติดตั้ง WooCommerce จะเพิ่ม Role ใหม่ 2 อย่าง คือ Customer (ลูกค้าที่ซื้อสินค้า) ซึ่งมีสิทธิ์คล้าย Subscriber แต่เพิ่ม Capability ด้าน Order มาด้วย และ Shop Manager ซึ่งมีสิทธิ์จัดการสินค้า คำสั่งซื้อ และลูกค้าได้ แต่ไม่สามารถเปลี่ยน Theme หรือติดตั้ง Plugin ได้ สามารถปรับ Capability ของทั้งสอง Role นี้ได้เช่นเดียวกับ Role ปกติ