Consentire ai membri di accedere solo ai custom post type. Permesso di modificare solo i propri post
OK sto cercando il modo migliore per affrontare questo.
Ho molta familiarità con PHP e la creazione di custom post type con campi meta personalizzati in WordPress.
Ecco cosa voglio fare:
- L'utente si registra e viene impostato come subscriber di default.
- L'utente richiede all'amministratore il permesso per il custom post type.
- L'amministratore assegna all'utente un altro permesso chiamato "Shop Owner".
- L'utente ora può vedere il custom post type e può creare un nuovo contenuto per questo tipo di post.
- L'utente può vedere e modificare solo i propri post.
Ho bisogno di aiuto per:
- Come creare un nuovo "Ruolo" chiamato "Shop Owner",
- Come dare i permessi corretti a tale ruolo per vedere e avere accesso solo al custom post type.
- Permettere all'utente di vedere e modificare solo i propri post in questo custom post type.
Idealmente preferirei che tutto fosse fatto dal wp-admin ma immagino che potrei aver bisogno di costruire un frontend per ottenere il controllo preciso che sto cercando.
Ogni suggerimento è molto apprezzato.
Cordiali saluti
Utilizza il plugin "Members" di Justin Tadlock. Ti offre la possibilità di creare nuovi ruoli e modificare quelli esistenti, oltre ad aggiungere capacità personalizzate. Tutto il lavoro che dovresti fare può essere ridotto a pochi click.
So che hai commentato la risposta di ZaMoose dicendo che vuoi "scrivere la funzionalità da solo per avere il pieno controllo su tutto". Questo significa perdere di vista il punto principale del software open source. Justin Tadlock ha rilasciato il suo plugin proprio perché tu possa usarlo e avere IL COMPLETO CONTROLLO su tutto.
Se davvero davvero vuoi reinventare la ruota, potenzialmente sprecando centinaia di ore del tuo tempo, non posso fermarti, ma potresti almeno risparmiarti la fatica e usare il plugin di Tadlock per imparare come fare ciò che desideri.
Una volta che hai un plugin che fa ciò che vuoi, dovrai cambiare il flag 'map_meta_cap'
a true
e il flag 'capability_type'
nella tua funzione di registrazione del post type in modo che indichi qualcosa di diverso da 'post', 'page' o qualsiasi altro tipo 'riservato'. Poi, duplica tutte le capacità relative ai post (es. edit_posts
, edit_others_posts
, publish_posts
, ecc.), utilizzando il tuo tipo di capacità invece di posts. Assicurati di assegnare tutte queste autorizzazioni agli amministratori (non sarai in grado di vedere il post type finché non lo farai), quindi crea il tuo ruolo, imitando le capacità del ruolo 'contributor' per il tuo post type.
Ad esempio, se il tuo tipo di capacità fosse foobars
, dovresti dare ai 'proprietari del negozio' le capacità edit_foobars
, delete_foobars
e read
. In questo modo possono creare i loro bozze di foobars ed eliminarle, ma poiché non hanno le capacità publish_foobars
, devono inviarle per l'approvazione. Dato che non hanno edit_published_foobars
, tutte le modifiche a un foobar approvato devono essere approvate.

OK sto usando il plugin Members ora per capire come funzionano i permessi dei membri. Ho impostato 'map_meta_cap' => true
e 'capability_type' => 'shopowner'
sul mio custom post type. Ho creato un nuovo ruolo chiamato ShopOwner
e gli ho assegnato le capacità di read, edit_shopowner, delete_shopowner. Ho impostato un utente con il ruolo di ShopOwner e ho effettuato l'accesso con quell'utente. Quell'utente non riesce a vedere il custom post type. Mi sono perso qualcosa?

cambiali in edit_shopowners
e delete_shopowners
. edit_shopowner
e delete_shopowner
sono meta capability che in realtà non vengono mai verificate. Vengono controllate quando qualcuno prova a modificare o eliminare un elemento specifico, e finiscono per verificare cose come "Questo utente può eliminare questi tipi di elementi? Può eliminare solo i propri o anche quelli degli altri? Può eliminare elementi pubblicati?" ecc.

Non sono riuscito a capirlo bene... ma ho ottenuto la funzionalità che cercavo impostando le capabilities nel mio custom post type e creando quelle capabilities nel plugin members. Ti ho assegnato la risposta perché il tuo post è stato il più utile per me per mettere insieme una soluzione. Grazie

La registrazione del post type ha un parametro chiamato "capabilities" che permette ad esempio di specificare:
'capability' => 'organize_shop',
http://codex.wordpress.org/Function_Reference/register_post_type
Per creare un nuovo utente/ruolo/capability puoi usare add_role, add_cap, ecco un semplice esempio per iniziare:
// Aggiunge il ruolo alla lista dei ruoli di WordPress
// Poi aggiunge la capability 'organize_shop' al ruolo 'shop_owner'
$role = add_role( 'shop_owner', 'Shop Owner', ['edit_posts' => true]));
$role->add_cap( 'organize_shop' );
// Se 'shop_owner' esiste già, rendi `$wp_roles` visibile e poi
// aggiungi la capability 'organize_shop' al ruolo 'Show Owner'
public $wp_roles;
$wp_roles->add_cap( 'shop_owner', 'organize_shop' );

hmm... Sono un po' confuso, qual è la differenza tra le righe 2 e 3? :S Non aggiungono la stessa capacità al ruolo 'Shop Owner'?

Sì, sono la stessa cosa ma mostrano modi diversi per farlo, il primo include il ruolo come primo parametro (Shop Owner), il secondo solo la capacità poiché sta usando $role.

@SvetoslavMarinov Ho modificato la risposta per rimuovere la traduzione.

Hai considerato di dare un'occhiata a Gravity Forms o TDO Mini Forms per gestire l'effettivo invio dei contenuti? Ognuno di essi offre funzionalità che potrebbero portarti avanti nel gestire in modo sensato i contenuti inviati dagli utenti.

Un modo più semplice ed efficiente per ottenere questo risultato è installare un plugin chiamato "Advanced Access Manager". Non dovrai scrivere la funzionalità manualmente, ma avrai comunque un buon livello di controllo su utenti, ruoli e ciò che possono fare. La maggior parte delle cose che desideri può essere realizzata con questo plugin.

Sono consapevole che questo sia un caso piuttosto particolare, ma mi è costato un'ora per capirlo.
Avevo il plugin: WP Custom Admin Interface attivato, dove puoi personalizzare il menu di amministrazione per utenti specifici. Se registri un custom post type, dopo aver abilitato e personalizzato il menu, allora c'è un pulsante in 'Custom Admin Interface' >> 'Admin Menu', chiamato 'Aggiungi elementi del menu aggiunti di recente'. Poi premi 'Salva' dopo di ciò, e se il punto del menu è accessibile per quel tipo di utente, allora funzionerà dopo.
