Capacità delle tassonomie personalizzate
Ho registrato diverse tassonomie personalizzate per un custom post type. Il codice per una di queste è il seguente:
$labels = array(
'name' => __( 'Genere', 'textdomain' ),
'singular_name' => __( 'Genere', 'textdomain' ),
'search_items' => __( 'Cerca Generi', 'textdomain' ),
'all_items' => __( 'Tutti i Generi', 'textdomain' ),
'parent_item' => __( 'Genere Genitore', 'textdomain' ),
'parent_item_colon' => __( 'Genere Genitore:', 'textdomain' ),
'edit_item' => __( 'Modifica Genere', 'textdomain' ),
'update_item' => __( 'Aggiorna Genere', 'textdomain' ),
'add_new_item' => __( 'Aggiungi Nuovo Genere', 'textdomain' ),
'new_item_name' => __( 'Nuovo Genere', 'textdomain' ),
'menu_name' => __( 'Generi', 'textdomain' ),
);
$args = array(
'labels' => $labels,
'public' => true,
'show_admin_column' => true,
'show_ui' => true,
'hierarchical' => true,
'capabilities' => array(
'manage_terms' => 'edit_posts',
'edit_terms' => 'edit_posts',
'delete_terms' => 'edit_posts',
'assign_terms' => 'edit_posts'
)
);
register_taxonomy( 'genres', 'book', $args );
Sto avendo problemi con le capacità, poiché vorrei che una delle tassonomie personalizzate possa essere gestita dagli autori.
Se definisco le capacità come nel codice sopra con 'manage_terms' => 'edit_posts'
, gli autori non possono aggiungere nuovi termini alla tassonomia personalizzata anche quando hanno le capacità edit_posts.
Ho anche provato ad aggiungere capacità personalizzate al ruolo autore e assegnare queste capacità durante la registrazione della tassonomia personalizzata, ma senza successo.
Ciò che funziona è aggiungere 'manage_categories' al ruolo autore, ma questa soluzione non è soddisfacente poiché tutte le tassonomie diventano modificabili dagli autori.
Grazie in anticipo.

Proprio come le capacità dei CPT, anche quelle delle tassonomie sono personalizzabili, in register_taxonomy()
:
capabilities
- 'manage_terms' - 'manage_categories'
- 'edit_terms' - 'manage_categories'
- 'delete_terms' - 'manage_categories'
- 'assign_terms' - 'edit_posts'
Poiché i tuoi autori hanno solo edit_posts
funziona come hai osservato — possono assegnare termini esistenti, ma non crearne di nuovi. Puoi personalizzare le capacità per la tassonomia in questione e concedere la rispettiva capacità agli autori, in modo che possano creare termini in essa (ma non in altre tassonomie).

@vguerrero no, devi regolare le capacità per le tassonomie. Tassonomia e CPT sono cose nettamente diverse con i loro propri set di capacità, non puoi manipolarle entrambe solo con la definizione del CPT.

Se ho capito bene, stai suggerendo di definire le capacità per il custom post type come 'capabilites' => array( 'manage_terms' => 'manage_custom_tax', 'edit_terms' => 'manage_custom_tax', 'delete_terms' => 'manage_custom_tax', 'assign_terms' => 'edit_posts')
e poi aggiungere 'manage_custom_tax' al ruolo author. L'avevo già provato prima di aprire questo post, e ho riprovato questa soluzione, senza successo. Credo di non averti capito. Apprezzerei maggiori dettagli o un esempio. Grazie.

@vguerrero sì, è quello che stavo suggerendo e non sono sicuro del perché non funzionasse nel tuo caso. Potresti provare a elaborare meglio cosa hai tentato nella tua domanda.

Ok. Questo è in qualche modo imbarazzante. Mi dispiace molto. Era tutto dovuto a un errore di battitura nella parola "capabilities", e non riuscivo a vederlo anche se ho combattuto per due giorni con questo problema. Penso che potrei eliminare questo post perché non ha alcun interesse. Scusa per il disagio.

Quando definisci le capacità durante la registrazione di una tassonomia, stai definendo nuove capacità che sono equivalenti alle capacità esistenti di manage_terms
, edit_terms
, delete_terms
e assign_terms
.
Quindi dovresti fare qualcosa come questo, dato che la tua tassonomia è Genre
:
'capabilities' => array(
'manage_terms' => 'manage_genre',
'edit_terms' => 'edit_genre',
'delete_terms' => 'delete_genre',
'assign_terms' => 'assign_genre',
)
Dopo aver fatto questo, sarai in grado di mappare queste capacità a un ruolo utente. Il modo più semplice per farlo e il mio metodo preferito è utilizzare un plugin come Capability Manager Enhanced, sebbene ci siano molti plugin che possono fare al caso tuo.

Nel caso qualcuno finisca qui cercando di modificare una tassonomia precedentemente registrata, è possibile utilizzare il register_taxonomy_args.
add_filter( 'register_taxonomy_args', 'modify_my_taxonomy', 20, 2 );
function modify_my_taxonomy( $args, $taxonomy ) {
$capabilities = array(
'manage_terms' => 'edit_posts',
'edit_terms' => 'edit_posts',
'delete_terms' => 'edit_posts',
'assign_terms' => 'edit_posts',
);
if ( 'my-tax' === $taxonomy ) {
$args['capabilities'] = $capabilities;
}
return $args;
}
