Capacità delle tassonomie personalizzate

24 lug 2014, 12:16:31
Visualizzazioni: 17.9K
Voti: 10

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.

1
Tutte le risposte alla domanda 3
6

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

24 lug 2014 12:30:32
Commenti

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

Rarst Rarst
24 lug 2014 12:50:40

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 vguerrero
24 lug 2014 12:53:52

Scusa, ho scritto custom post type ma intendevo custom taxonomy.

vguerrero vguerrero
24 lug 2014 13:01:40

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

Rarst Rarst
24 lug 2014 13:08:17

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.

vguerrero vguerrero
24 lug 2014 18:49:11

Ho un problema con la tassonomia hierarchical' => false, nonostante il menu sia scomparso, l'utente è ancora in grado di creare i tag inserendo ciò che gli passa per la mente nell'area dei tag separati da virgole :/

Fanky Fanky
5 ago 2022 12:34:28
Mostra i restanti 1 commenti
0

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.

14 ott 2016 00:14:00
0

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;

}
21 nov 2024 22:23:43