Consentire ai membri di accedere solo ai custom post type. Permesso di modificare solo i propri post

12 apr 2011, 13:08:21
Visualizzazioni: 68.2K
Voti: 35

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:

  1. L'utente si registra e viene impostato come subscriber di default.
  2. L'utente richiede all'amministratore il permesso per il custom post type.
  3. L'amministratore assegna all'utente un altro permesso chiamato "Shop Owner".
  4. L'utente ora può vedere il custom post type e può creare un nuovo contenuto per questo tipo di post.
  5. L'utente può vedere e modificare solo i propri post.

Ho bisogno di aiuto per:

  1. Come creare un nuovo "Ruolo" chiamato "Shop Owner",
  2. Come dare i permessi corretti a tale ruolo per vedere e avere accesso solo al custom post type.
  3. 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

0
Tutte le risposte alla domanda 5
3
22

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.

12 apr 2011 17:49:40
Commenti

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?

Scott Scott
12 apr 2011 19:33:56

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.

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

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

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

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

12 apr 2011 18:06:32
Commenti

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

dashaluna dashaluna
13 set 2011 14:36:02

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.

Wyck Wyck
13 set 2011 14:43:09

Dovresti tradurre una capacità/permesso? Questo è __('');

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

@SvetoslavMarinov Ho modificato la risposta per rimuovere la traduzione.

MikeSchinkel MikeSchinkel
24 feb 2019 05:41:43

@dashaluna Ho modificato la risposta per renderla più chiara.

MikeSchinkel MikeSchinkel
24 feb 2019 05:51:50

@MikeSchinkel fantastico

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

register_post_type non ha un argomento capability, solo capabilities e capability_type

Flimm Flimm
13 lug 2022 14:09:15
Mostra i restanti 2 commenti
1

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.

12 apr 2011 16:37:10
Commenti

Grazie per la risposta, ma non è esattamente quello che sto cercando. Principalmente perché si tratta di plugin. Io vorrei scrivere la funzionalità da solo per avere il pieno controllo su ogni aspetto.

Scott Scott
12 apr 2011 17:09:07
0

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.

24 feb 2019 10:54:01
0

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.

19 ago 2021 10:44:42