Permiteți membrilor să aibă acces doar la tipul de postare personalizat. Permisiunea de a edita doar propriile postări
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:
- Utilizatorul se înregistrează și este setat implicit ca abonat.
- Utilizatorul solicită administratorului permisiunea pentru tipul de postare personalizat.
- Administratorul atribuie utilizatorului un alt nume de permisiune precum "Proprietar Magazin".
- Utilizatorul poate acum să vadă tipul de postare personalizat și poate face o intrare pentru acest tip de postare.
- Utilizatorul poate vedea și edita doar propriile postări.
Am nevoie de ajutor pentru următoarele:
- Cum să creez un nou "Rol" numit "Proprietar Magazin"
- Cum să ofer permisiunea corectă acestui rol pentru a vedea și avea acces doar la tipul de postare personalizat.
- 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ă
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ă.

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?

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.

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

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' );

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

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.

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

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.

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.

Ș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.
