User Role และ Permission WordPress จัดการได้ง่าย

รู้จัก Administrator, Editor, Author, Contributor, Subscriber และวิธีกำหนดสิทธิ์ให้เหมาะกับทีมของคุณ

User Role และ Permission WordPress จัดการได้ง่าย 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 หรือแก้ไขฐานข้อมูล:

  1. เข้าสู่ WordPress Dashboard ในฐานะ Administrator
  2. ไปที่เมนู Users > Add New User
  3. กรอก Username, Email, First Name, Last Name
  4. ตั้ง Password (หรือใช้ Password ที่ระบบสร้างให้อัตโนมัติ)
  5. เลือก Role จาก Dropdown ตามความเหมาะสม
  6. ติ๊ก "Send the new user an email about their account" ถ้าต้องการส่ง Email แจ้งเตือน
  7. คลิก Add New User

วิธีเปลี่ยน Role ของผู้ใช้ที่มีอยู่แล้ว

หากต้องการเปลี่ยน Role ของผู้ใช้เดิม เช่น เลื่อน Contributor เป็น Author หลังจากทำงานได้ดี:

  1. ไปที่ Users > All Users
  2. คลิกชื่อผู้ใช้ที่ต้องการแก้ไข หรือ Hover แล้วคลิก Edit
  3. เลื่อนลงมาที่ส่วน Role แล้วเลือก Role ใหม่จาก Dropdown
  4. คลิก Update User เพื่อบันทึก

นอกจากนี้ยังสามารถเปลี่ยน Role ของหลายคนพร้อมกันได้ โดยติ๊กเลือกผู้ใช้หลายคน เลือก "Change role to..." จาก Bulk Actions แล้วคลิก Apply

ตาราง Capability สรุปสิทธิ์แต่ละ Role

เพื่อให้เห็นภาพชัดขึ้น นี่คือ Capability สำคัญ ๆ และ Role ที่มีสิทธิ์:

การสร้าง 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' );
หมายเหตุ: add_role() จะทำงานครั้งเดียวและบันทึกลงฐานข้อมูล หากต้องการอัปเดต Capability ในภายหลัง ต้องลบ 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 ได้สะดวก:

ติดตั้ง Plugin เหล่านี้ได้ผ่าน Plugins > Add New Plugin ใน Dashboard ค้นหาชื่อ Plugin แล้วคลิก Install Now แล้ว Activate

Best Practice การจัดการ User Roles ให้ปลอดภัย


ตรวจสอบว่า 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'
);
Tip: หาก prefix ของตารางไม่ใช่ 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 ปกติ