Permiteți membrilor să aibă acces doar la tipul de postare personalizat. Permisiunea de a edita doar propriile postări

12 apr. 2011, 13:08:21
Vizualizări: 68.2K
Voturi: 35

OK, caut cea mai bună modalitate de a aborda acest lucru.

Sunt foarte familiarizat cu PHP și cu crearea tipurilor de postări personalizate cu câmpuri meta personalizate în WordPress.

Iată ce doresc să fac:

  1. Utilizatorul se înregistrează și este setat implicit ca abonat.
  2. Utilizatorul solicită administratorului permisiunea pentru tipul de postare personalizat.
  3. Administratorul atribuie utilizatorului un alt nume de permisiune precum "Proprietar Magazin".
  4. Utilizatorul poate acum să vadă tipul de postare personalizat și poate face o intrare pentru acest tip de postare.
  5. Utilizatorul poate vedea și edita doar propriile postări.

Am nevoie de ajutor pentru următoarele:

  1. Cum să creez un nou "Rol" numit "Proprietar Magazin"
  2. Cum să ofer permisiunea corectă acestui rol pentru a vedea și avea acces doar la tipul de postare personalizat.
  3. Să permit utilizatorului să vadă și să editeze doar propriile postări pentru acest tip de postare personalizat.

Ideal ar fi ca totul să fie făcut din wp-admin, dar presupun că ar putea fi nevoie să construiesc un frontend pentru a obține controlul fin pe care îl doresc.

Orice sugestie este apreciată.

Cu stimă

0
Toate răspunsurile la întrebare 5
3
22

Folosește plugin-ul "Members" creat de Justin Tadlock. Acesta îți oferă posibilitatea de a crea roluri noi și de a edita rolurile existente, precum și de a adăuga capabilități personalizate. Toată munca pe care ai fi nevoit să o faci poate fi redusă la câteva clicuri.

Știu că ai menționat în comentariul tău la răspunsul lui ZaMoose că "dorești să scrii funcționalitatea singur pentru a avea control total asupra tuturor aspectelor". Însă asta ratează întregul scop al software-ului open source. Justin Tadlock a lansat acest plugin tocmai pentru a-l putea folosi și astfel să AI control complet asupra tuturor aspectelor.

Dacă chiar chiar dorești să reinventezi roata, riscând să pierzi sute de ore din timpul tău, nu te pot opri. Dar cel puțin ai putea să-ți ușurezi munca și să folosești plugin-ul lui Tadlock pentru a învăța cum să faci ceea ce dorești.

Odată ce ai un plugin care face ceea ce dorești, va trebui să modifici flag-ul 'map_meta_cap' la true și flag-ul 'capability_type' în funcția de înregistrare a tipului de postare, astfel încât să conțină altceva decât 'post', 'page' sau orice alt tip 'rezervat'. Apoi, duplică toate capabilitățile legate de postări (de ex. edit_posts, edit_others_posts, publish_posts, etc.), folosind tipul tău de capabilitate în loc de 'posts'. Asigură-te că atribui toate aceste permisiuni administratorilor (nu vei putea vedea tipul de postare până nu faci asta), apoi creează rolul tău, imitând abilitățile rolului 'contributor' pentru tipul tău de postare.

De exemplu, dacă tipul tău de capabilitate ar fi foobars, ai dori să oferi 'proprietarilor de magazin' capabilitățile edit_foobars, delete_foobars și read. Astfel, ei pot crea propriile drafturi de foobars și pot șterge acele drafturi, dar pentru că nu au capabilitățile publish_foobars, trebuie să le trimită pentru aprobare. Deoarece nu au edit_published_foobars, orice modificare a unui foobar aprobat trebuie să fie aprobată.

12 apr. 2011 17:49:40
Comentarii

OK, acum folosesc plugin-ul Members pentru a înțelege cum funcționează permisiunile pentru membri. Am setat 'map_meta_cap' => true și 'capability_type' => 'shopowner' pentru tipul meu de postare personalizat. Am creat un nou rol numit ShopOwner și i-am acordat capabilitățile read, edit_shopowner, delete_shopowner. Am setat un utilizator cu rolul de ShopOwner și m-am autentificat cu acel utilizator. Acel utilizator nu poate vedea tipul de postare personalizat. Am omis ceva?

Scott Scott
12 apr. 2011 19:33:56

schimbă-le în edit_shopowners și delete_shopowners. edit_shopowner și delete_shopowner sunt capabilități meta care nu sunt niciodată verificate efectiv. Ele sunt verificate când cineva încearcă să editeze sau să șteargă un anumit element, și ajung să verifice lucruri precum "Poate acest utilizator să șteargă aceste tipuri de elemente? Poate să șteargă doar pe cele ale sale sau și pe ale altora? Poate să șteargă elemente publicate?" etc.

John P Bloch John P Bloch
12 apr. 2011 19:43:26

Nu am reușit să înțeleg prea bine asta... dar am obținut funcționalitatea dorită prin setarea capabilităților în tipul meu de postare personalizat și crearea acelor capabilități în plugin-ul Members. Ți-am acordat răspunsul pentru că postarea ta a fost cea mai utilă pentru mine să construiesc o soluție. Mulțumesc

Scott Scott
12 apr. 2011 20:03:46
7
21

Funcția register_post_type are un parametru numit "capabilities" care vă permite să setați, de exemplu:

'capability' => 'organize_shop',

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

Pentru a crea un nou utilizator/rol/capabilitate, puteți folosi add_role, add_cap. Iată un exemplu simplu pentru început:

// Adaugă rolul în lista de roluri WordPress
// Apoi adaugă capabilitatea 'organize_shop' la rolul 'shop_owner'
$role = add_role( 'shop_owner', 'Proprietar de Magazin', ['edit_posts' => true]));
$role->add_cap( 'organize_shop' );


// Dacă 'shop_owner' există deja, face `$wp_roles` vizibil 
// apoi adaugă capabilitatea 'organize_shop' la rolul 'Proprietar de Magazin'
public $wp_roles;
$wp_roles->add_cap( 'shop_owner', 'organize_shop' );

12 apr. 2011 18:06:32
Comentarii

hmm... Sunt puțin confuz care este diferența dintre liniile 2 și 3? :S Nu adaugă aceeași capacitate rolului 'Shop Owner'?

dashaluna dashaluna
13 sept. 2011 14:36:02

Da, sunt la fel, dar arată modalități diferite de a face asta. Prima include rolul ca prim parametru (Shop Owner), a doua doar capacitatea deoarece folosește $role.

Wyck Wyck
13 sept. 2011 14:43:09

Trebuie să traduci o capacitate/permisiune? Adică __('');

Svetoslav Marinov Svetoslav Marinov
4 nov. 2015 18:55:41

@SvetoslavMarinov Am editat răspunsul pentru a elimina traducerea.

MikeSchinkel MikeSchinkel
24 feb. 2019 05:41:43

@dashaluna Am editat răspunsul pentru a-l clarifica.

MikeSchinkel MikeSchinkel
24 feb. 2019 05:51:50

@MikeSchinkel fain

Svetoslav Marinov Svetoslav Marinov
24 feb. 2019 10:52:05

register_post_type nu are un argument capability, doar capabilities și capability_type

Flimm Flimm
13 iul. 2022 14:09:15
Arată celelalte 2 comentarii
1

Ai luat în considerare să te uiți la Gravity Forms sau TDO Mini Forms pentru a gestiona trimiterea efectivă a conținutului? Fiecare dintre acestea are funcționalități care te-ar duce departe în gestionarea rațională a conținutului trimis de utilizatori.

12 apr. 2011 16:37:10
Comentarii

Mulțumesc pentru răspuns, dar nu acestea sunt ceea ce caut. În principal pentru că acestea sunt plugin-uri. Eu caut să scriu funcționalitatea singur, pentru a avea control total asupra tuturor aspectelor.

Scott Scott
12 apr. 2011 17:09:07
0

O metodă mai ușoară și eficientă de a realiza acest lucru este prin instalarea unui plugin numit "Advanced Access Manager". Nu va trebui să scrii funcționalitatea, dar vei avea totuși un nivel decent de control asupra utilizatorilor, rolurilor și a ceea ce pot face. Majoritatea lucrurilor pe care le dorești pot fi realizate prin intermediul acestui plugin.

24 feb. 2019 10:54:01
0

Știu că este un caz destul de special, dar mi-a luat o oră să îmi dau seama.

Aveam activat pluginul: WP Custom Admin Interface, unde poți personaliza meniul de administrare pentru anumiți utilizatori. Dacă înregistrezi un tip de postare personalizat, după ce ai activat și personalizat meniul, atunci există un buton în 'Custom Admin Interface' >> 'Admin Menu', numit 'Adaugă elemente noi de meniu'. Apasă 'Salvează' după aceea, iar dacă punctul de meniu este accesibil pentru acel tip de utilizator, atunci va funcționa după aceea.

19 aug. 2021 10:44:42