Cum să configurezi capabilitățile pentru taxonomii personalizate în WordPress
Am înregistrat mai multe taxonomii personalizate pentru un tip de postare personalizat. Codul pentru una dintre ele este următorul:
$labels = array(
'name' => __( 'Gen', 'textdomain' ),
'singular_name' => __( 'Gen', 'textdomain' ),
'search_items' => __( 'Căutare genuri', 'textdomain' ),
'all_items' => __( 'Toate genurile', 'textdomain' ),
'parent_item' => __( 'Gen părinte', 'textdomain' ),
'parent_item_colon' => __( 'Gen părinte:', 'textdomain' ),
'edit_item' => __( 'Editează gen', 'textdomain' ),
'update_item' => __( 'Actualizează gen', 'textdomain' ),
'add_new_item' => __( 'Adaugă gen nou', 'textdomain' ),
'new_item_name' => __( 'Gen nou', 'textdomain' ),
'menu_name' => __( 'Genuri', '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 );
Am probleme cu capabilitățile, deoarece doresc ca una dintre taxonomiile personalizate să poată fi gestionată de autori.
Dacă definesc capabilitățile ca în codul de mai sus 'manage_terms' => 'edit_posts'
, autorii nu au voie să adauge termeni noi la taxonomia personalizată, chiar dacă au capabilitatea edit_posts.
Am încercat de asemenea să adaug capabilități custom rolului de autor și să le atribui la înregistrarea taxonomiei personalizate, dar fără succes.
Ce funcționează este adăugarea capabilității 'manage_categories' pentru autorii, dar această soluție nu este satisfăcătoare deoarece toate taxonomiile devin editabile de autori.
Mulțumesc anticipat.

La fel ca și capabilitățile CPT, cele ale taxonomiei sunt și ele personalizabile, în register_taxonomy()
:
capabilități
- 'manage_terms' - 'manage_categories'
- 'edit_terms' - 'manage_categories'
- 'delete_terms' - 'manage_categories'
- 'assign_terms' - 'edit_posts'
Deoarece autorii tăi au doar edit_posts
, funcționează așa cum ai observat — ei pot atribui termeni existenți, dar nu îi pot crea. Poți personaliza capabilitățile pentru taxonomia în cauză și să le oferi autorilor capabilitatea respectivă, astfel încât să poată crea termeni în ea (dar nu și în alte taxonomii).

@vguerrero nu, trebuie să ajustezi capabilitățile pentru taxonomii. Taxonomia și CPT (tipul de postare personalizat) sunt lucruri distincte cu seturi proprii de capabilități, nu poți manipula ambele doar prin definiția CPT.

Dacă înțeleg corect, sugerezi să definesc capabilitățile pentru tipul de postare personalizat ca 'capabilites' => array( 'manage_terms' => 'manage_custom_tax', 'edit_terms' => 'manage_custom_tax', 'delete_terms' => 'manage_custom_tax', 'assign_terms' => 'edit_posts')
și apoi să adaug 'manage_custom_tax' rolului de autor. Am încercat asta înainte de a deschide acest post și am încercat din nou această soluție, fără succes. Cred că nu te înțeleg. Aș aprecia mai multe detalii sau un exemplu. Mulțumesc.

Scuze, am scris custom post type (tip de postare personalizat) dar voiam să spun custom taxonomy (taxonomie personalizată).

@vguerrero da, asta sugeram și nu sunt sigur de ce nu ar funcționa în cazul tău. Ai putea încerca să detaliezi ce ai încercat în întrebarea ta.

Ok. Acest lucru este oarecum jenant. Îmi pare atât de rău pentru asta. Totul s-a întâmplat din cauza unei greșeli de scriere în cuvântul "capabilites", și nu am putut să o văd chiar dacă m-am luptat cu asta timp de două zile. Cred că aș putea șterge acest post pentru că nu are niciun interes. Îmi cer scuze pentru neplăceri.

Când definiți capabilități în timpul înregistrării unei taxonomii, definiți noi capabilități care sunt egale cu capabilitățile existente ale manage_terms
, edit_terms
, delete_terms
și assign_terms
.
Deci, ar trebui să faceți ceva de genul acesta, deoarece taxonomia dumneavoastră este Genre
:
'capabilities' => array(
'manage_terms' => 'manage_genre',
'edit_terms' => 'edit_genre',
'delete_terms' => 'delete_genre',
'assign_terms' => 'assign_genre',
)
După ce acest lucru este făcut, veți putea mapa aceste capabilități la un rol de utilizator. Cea mai ușoară metodă și preferata mea este să folosiți un plugin precum Capability Manager Enhanced, deși există multe plugin-uri care pot face treaba.

În cazul în care cineva ajunge aici în căutarea unei modalități de a modifica o taxonomie înregistrată anterior, puteți utiliza filtrul 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;
}
