อนุญาตให้สมาชิกมีสิทธิ์เข้าถึงประเภทโพสต์ที่กำหนดเองเท่านั้น การอนุญาตให้แก้ไขโพสต์ของตนเองเท่านั้น


29

ตกลงฉันกำลังมองหาวิธีที่ดีที่สุดในการโจมตีนี้

ฉันสบายใจกับ PHP และสร้างประเภทโพสต์ที่กำหนดเองด้วยเขตข้อมูลเมตาที่กำหนดเองใน WordPress

นี่คือสิ่งที่ฉันกำลังมองหา:

  1. ผู้ใช้ที่ลงทะเบียนและถูกตั้งค่าเป็นสมาชิกตามค่าเริ่มต้น
  2. ผู้ใช้ร้องขอจากผู้ดูแลระบบเพื่อให้ได้รับอนุญาตประเภทโพสต์ที่กำหนดเอง
  3. ผู้ดูแลระบบกำหนดผู้ใช้ให้กับชื่อการอนุญาตอื่นเช่น "เจ้าของร้าน"
  4. ขณะนี้ผู้ใช้สามารถเห็นประเภทโพสต์ที่กำหนดเองและสามารถเข้าสู่โพสต์ประเภทนี้
  5. ผู้ใช้สามารถดูและแก้ไขโพสต์ของตนเองเท่านั้น

ฉันต้องการความช่วยเหลือในเรื่องต่อไปนี้:

  1. วิธีสร้าง "บทบาท" ใหม่ที่เรียกว่า "เจ้าของร้านค้า"
  2. วิธีให้สิทธิ์ที่ถูกต้องกับบทบาทดังกล่าวเพื่อดูและเข้าถึงประเภทโพสต์ที่กำหนดเองเท่านั้น
  3. อนุญาตให้ผู้ใช้เห็นและแก้ไขโพสต์ของตนเองในประเภทโพสต์ที่กำหนดเองนี้เท่านั้น

เป็นการดีที่ฉันจะชอบสิ่งนี้ทั้งหมดทำจาก wp-admin แต่ฉันเดาว่าฉันอาจต้องสร้างส่วนหน้าสำหรับสิ่งนี้เพื่อให้ได้การควบคุมที่แน่นอนหลังจากฉัน

ข้อมูลใด ๆ ที่ชื่นชมอย่างมาก

ขอแสดงความนับถือ

คำตอบ:


21

ใช้ปลั๊กอิน " สมาชิก " ของ Justin Tadlock มันช่วยให้คุณสามารถสร้างบทบาทใหม่และแก้ไขบทบาทที่มีอยู่รวมทั้งเพิ่มความสามารถที่กำหนดเอง การทำงานทั้งหมดที่คุณต้องทำนั้นสามารถทำได้เพียงไม่กี่คลิก

ฉันรู้ว่าคุณพูดในความคิดเห็นของคุณในคำตอบของ ZaMoose ว่าคุณกำลัง 'ต้องการเขียนฟังก์ชั่นด้วยตัวเองดังนั้นฉันจึงควบคุมทุกอย่างได้อย่างเต็มที่' นั่นคือจุดเริ่มต้นของซอฟต์แวร์โอเพ่นซอร์สทั้งหมด Justin Tadlock ปล่อยปลั๊กอินของเขาเพื่อให้คุณสามารถใช้งานได้อย่างแม่นยำดังนั้นคุณจะสามารถควบคุมทุกอย่างได้อย่างสมบูรณ์

หากคุณต้องการสร้างวงล้อใหม่จริงๆอาจเสียเวลาหลายร้อยชั่วโมงในเวลาของคุณฉันไม่สามารถหยุดคุณได้ แต่อย่างน้อยคุณสามารถช่วยตัวคุณเองให้เดือดร้อนจากปัญหาและใช้ปลั๊กอินของ Tadlock เพื่อเรียนรู้วิธีการทำสิ่งที่คุณต้องการ

เมื่อคุณมีปลั๊กอินที่ทำในสิ่งที่คุณต้องการแล้วคุณจะต้องเปลี่ยนการ'map_meta_cap'ตั้งค่าสถานะtrueและการ'capability_type'ตั้งค่าสถานะในฟังก์ชันการลงทะเบียนประเภทโพสต์ของคุณเพื่อให้มันพูดถึงสิ่งอื่นนอกเหนือจาก 'โพสต์', 'หน้า' หรืออื่น ๆ ชนิด จากนั้นทำซ้ำความสามารถทั้งหมดที่เกี่ยวข้องกับการโพสต์ (เช่นedit_posts, edit_others_posts, publish_postsฯลฯ ) ใช้ประเภทความสามารถของคุณแทนการโพสต์ ตรวจสอบให้แน่ใจว่าได้กำหนดสิทธิ์ทั้งหมดเหล่านี้ให้กับผู้ดูแลระบบ (คุณจะไม่สามารถเห็นประเภทโพสต์จนกว่าคุณจะทำสิ่งนี้) จากนั้นสร้างบทบาทของคุณเลียนแบบความสามารถของบทบาท 'ผู้สนับสนุน' สำหรับประเภทโพสต์ของคุณ

ตัวอย่างเช่นสมมติว่าประเภทความสามารถของคุณfoobarsคุณจะต้องการที่จะให้ 'เจ้าของร้านค้าฯedit_foobars, delete_foobarsและreadความสามารถในการ ด้วยวิธีนี้พวกเขาสามารถสร้าง foobars แบบร่างของตนเองและลบแบบร่างเหล่านั้น แต่เนื่องจากไม่มีpublish_foobarsความสามารถจึงต้องส่งเพื่อขออนุมัติ เนื่องจากยังไม่มีedit_published_foobarsการแก้ไข foobar ที่อนุมัติทั้งหมดจะต้องได้รับการอนุมัติ


ตกลงฉันใช้ปลั๊กอินสมาชิกทันทีเพื่อให้การทำงานของสมาชิกเป็นไปอย่างรวดเร็ว ฉันได้ตั้งค่า'map_meta_cap' => trueและ'capability_type' => 'shopowner'ชนิดโพสต์ที่กำหนดเองของฉันแล้ว ฉันสร้างบทบาทใหม่ที่เรียกว่าShopOwnerและให้ความสามารถในการอ่าน edit_shopowner, delete_shopowner ตั้งค่าผู้ใช้เป็นบทบาทของ ShopOwner และเข้าสู่ระบบด้วยผู้ใช้นั้น ผู้ใช้นั้นไม่เห็นประเภทโพสต์ที่กำหนดเอง ฉันพลาดอะไรไปหรือเปล่า
เบรดี้

2
เปลี่ยนแปลงเหล่านั้นไปและedit_shopowners และเป็นความสามารถของเมตาที่ไม่เคยตรวจสอบ พวกเขากำลังตรวจสอบเมื่อมีคนพยายามแก้ไขหรือลบรายการเฉพาะและจบการตรวจสอบสิ่งต่าง ๆ เช่น "ผู้ใช้รายนี้สามารถลบรายการประเภทเหล่านี้ได้หรือไม่พวกเขาสามารถลบรายการของตนเองหรือผู้อื่นด้วยได้หรือไม่? ฯลฯdelete_shopownersedit_shopownerdelete_shopowner
John P Bloch

ฉันไม่สามารถรับรู้ได้ว่า ... แต่ฉันได้รับฟังก์ชั่นที่ฉันตามด้วยการตั้งค่าความสามารถในประเภทโพสต์ที่กำหนดเองของฉันและการสร้างความสามารถเหล่านั้นในปลั๊กอินสมาชิก ฉันให้คำตอบกับคุณเนื่องจากโพสต์ของคุณมีประโยชน์มากที่สุดสำหรับฉันในการแก้ปัญหาด้วยกัน ขอบคุณ
เบรดี้

19

ประเภทการลงทะเบียนโพสต์มีพารามิเตอร์ที่เรียกว่า "ความสามารถ" เพื่อให้คุณสามารถมีเช่น

'capability' => 'organize_shop',

http://codex.wordpress.org/Function_Reference/register_post_type

ในการสร้างผู้ใช้ / บทบาท / ความสามารถใหม่คุณสามารถใช้ add_role, add_cap เพื่อเป็นตัวอย่างง่ายๆในการเริ่มต้น:

// Add the role to WordPress list of roles
// Then add the capability 'organize_shop' to the 'shop_owner' role
$role = add_role( 'shop_owner', 'Shop Owner', ['edit_posts' => true]));
$role->add_cap( 'organize_shop' );


// If 'shop_owner' already exists make `$wp_roles` visible then 
// add the capability 'organize_shop' to the 'Show Owner' role
public $wp_roles;
$wp_roles->add_cap( 'shop_owner', 'organize_shop' );


อืม ... ฉันสับสนเล็กน้อยความแตกต่างระหว่าง 2 และ 3 บรรทัดคืออะไร : S มันไม่ได้เพิ่มความสามารถแบบเดียวกันกับ 'Shop Owner'role หรือไม่?
dashaluna

ใช่พวกเขาเหมือนกัน แต่พวกเขาแสดงวิธีที่แตกต่างในการทำสิ่งแรกรวมถึงบทบาทเป็นพารามิเตอร์แรก (เจ้าของร้านค้า) คนที่สองเป็นเพียงตัวพิมพ์ใหญ่เนื่องจากใช้บทบาท $
Wyck

3
คุณควรจะแปลความสามารถ / การอนุญาตหรือไม่? นั่นคือ __ ('');
Svetoslav Marinov

@SvetoslavMarinov ฉันแก้ไขคำตอบเพื่อลบการแปล
MikeSchinkel

@dashaluna ฉันแก้ไขคำตอบเพื่อชี้แจง
MikeSchinkel

1

คุณเคยพิจารณาดูที่Gravity FormsหรือTDO Mini Formsเพื่อจัดการกับการส่งเนื้อหาจริงหรือไม่? พวกเขาแต่ละคนมีฟังก์ชั่นการใช้งานที่จะช่วยให้คุณก้าวไปสู่การจัดการเนื้อหาที่ผู้ใช้ส่งอย่างดี


ขอบคุณที่ตอบกลับ แต่นี่ไม่ใช่สิ่งที่ฉันกำลังมองหา สาเหตุหลักมาจากสิ่งเหล่านี้เป็นปลั๊กอิน ฉันกำลังมองหาที่จะเขียนฟังก์ชั่นของตัวเองดังนั้นฉันจึงสามารถควบคุมทุกอย่าง
เบรดี้

0

วิธีที่ง่ายและมีประสิทธิภาพในการทำให้สิ่งนี้สามารถทำได้โดยการติดตั้งปลั๊กอินที่ชื่อว่า "Advance Access Manager" คุณจะไม่ต้องเขียนฟังก์ชันการทำงาน แต่ยังคงมีการควบคุมในระดับที่เหมาะสมกับผู้ใช้บทบาทและสิ่งที่พวกเขาสามารถทำได้ ส่วนใหญ่ของสิ่งที่คุณต้องการสามารถทำได้โดยปลั๊กอินนี้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.