Funzionalità e tipi di post personalizzati
4 risposta
- voti
-
- 2013-07-30
Dopo una rapida chat con Magicroundabout che haindicato una risorsa utile da Justin Tadlock ,it risulta che le capacitàperi tipi dipostpersonalizzatinonesistonoeffettivamente ameno chenon utilizzi add_cap al ruolo,adesempioperil seguentetipo dipostpersonalizzato:
add_action( 'init', 'register_cpt_gallery' ); function register_cpt_gallery() { $labels = array( 'name' => __( 'Galleries', 'gallery' ), 'singular_name' => __( 'Gallery', 'gallery' ), 'add_new' => __( 'Add New', 'gallery' ), 'add_new_item' => __( 'Add New Gallery', 'gallery' ), 'edit_item' => __( 'Edit Gallery', 'gallery' ), 'new_item' => __( 'New Gallery', 'gallery' ), 'view_item' => __( 'View Gallery', 'gallery' ), 'search_items' => __( 'Search Galleries', 'gallery' ), 'not_found' => __( 'No galleries found', 'gallery' ), 'not_found_in_trash' => __( 'No galleries found in Trash', 'gallery' ), 'parent_item_colon' => __( 'Parent Gallery:', 'gallery' ), 'menu_name' => __( 'Galleries', 'gallery' ), ); $args = array( 'labels' => $labels, 'hierarchical' => true, 'description' => 'Image galleries for teachers classes', 'supports' => array( 'title', 'editor', 'author'), 'public' => true, 'show_ui' => true, 'show_in_menu' => true, 'menu_icon' => get_bloginfo('template_url') . '/images/imagegallery.png', 'show_in_nav_menus' => true, 'publicly_queryable' => true, 'exclude_from_search' => false, 'has_archive' => true, 'query_var' => true, 'can_export' => true, 'rewrite' => true, 'capabilities' => array( 'edit_post' => 'edit_gallery', 'edit_posts' => 'edit_galleries', 'edit_others_posts' => 'edit_other_galleries', 'publish_posts' => 'publish_galleries', 'read_post' => 'read_gallery', 'read_private_posts' => 'read_private_galleries', 'delete_post' => 'delete_gallery' ), // as pointed out by iEmanuele, adding map_meta_cap will map the meta correctly 'map_meta_cap' => true ); register_post_type( 'gallery', $args ); }
Lefunzionalità aggiuntive dovrebberoessere aggiunte a un ruolo affinché le autorizzazionifunzioninoeffettivamentenelbackend,incluso "amministratore",adesempio:
function add_theme_caps() { // gets the administrator role $admins = get_role( 'administrator' ); $admins->add_cap( 'edit_gallery' ); $admins->add_cap( 'edit_galleries' ); $admins->add_cap( 'edit_other_galleries' ); $admins->add_cap( 'publish_galleries' ); $admins->add_cap( 'read_gallery' ); $admins->add_cap( 'read_private_galleries' ); $admins->add_cap( 'delete_gallery' ); } add_action( 'admin_init', 'add_theme_caps');
Spero che questo sia utile ad altri.
Inoltre,lafunzione ditraduzione
_x()
prevede cheil secondo argomento siastring $context
,che è unabreve descrizione,e ilterzo siastring $domain
. Quandonon sifornisce una descrizione,utilizzare lafunzione ditraduzione__()
invece che ha lastring $domain
come secondo argomento.After a quick chat with Magicroundabout who pointed out a useful resource from Justin Tadlock, it turns out that capabilities for custom post types don't actually exist unless you use add_cap to the role, for example for the following custom post type:
add_action( 'init', 'register_cpt_gallery' ); function register_cpt_gallery() { $labels = array( 'name' => __( 'Galleries', 'gallery' ), 'singular_name' => __( 'Gallery', 'gallery' ), 'add_new' => __( 'Add New', 'gallery' ), 'add_new_item' => __( 'Add New Gallery', 'gallery' ), 'edit_item' => __( 'Edit Gallery', 'gallery' ), 'new_item' => __( 'New Gallery', 'gallery' ), 'view_item' => __( 'View Gallery', 'gallery' ), 'search_items' => __( 'Search Galleries', 'gallery' ), 'not_found' => __( 'No galleries found', 'gallery' ), 'not_found_in_trash' => __( 'No galleries found in Trash', 'gallery' ), 'parent_item_colon' => __( 'Parent Gallery:', 'gallery' ), 'menu_name' => __( 'Galleries', 'gallery' ), ); $args = array( 'labels' => $labels, 'hierarchical' => true, 'description' => 'Image galleries for teachers classes', 'supports' => array( 'title', 'editor', 'author'), 'public' => true, 'show_ui' => true, 'show_in_menu' => true, 'menu_icon' => get_bloginfo('template_url') . '/images/imagegallery.png', 'show_in_nav_menus' => true, 'publicly_queryable' => true, 'exclude_from_search' => false, 'has_archive' => true, 'query_var' => true, 'can_export' => true, 'rewrite' => true, 'capabilities' => array( 'edit_post' => 'edit_gallery', 'edit_posts' => 'edit_galleries', 'edit_others_posts' => 'edit_other_galleries', 'publish_posts' => 'publish_galleries', 'read_post' => 'read_gallery', 'read_private_posts' => 'read_private_galleries', 'delete_post' => 'delete_gallery' ), // as pointed out by iEmanuele, adding map_meta_cap will map the meta correctly 'map_meta_cap' => true ); register_post_type( 'gallery', $args ); }
The additional capabilities should be added to a role for the permissions to actually work in the backend, including the 'administrator' - for example:
function add_theme_caps() { // gets the administrator role $admins = get_role( 'administrator' ); $admins->add_cap( 'edit_gallery' ); $admins->add_cap( 'edit_galleries' ); $admins->add_cap( 'edit_other_galleries' ); $admins->add_cap( 'publish_galleries' ); $admins->add_cap( 'read_gallery' ); $admins->add_cap( 'read_private_galleries' ); $admins->add_cap( 'delete_gallery' ); } add_action( 'admin_init', 'add_theme_caps');
I hope this is useful to others.
Additionally, the
_x()
translation function expects the second argument to bestring $context
, which is a short description, and the third to bestring $domain
. When not providing a description, use the__()
translation function instead which has thestring $domain
as the second argument.-
`add_theme_caps ()` dovrebbeessere chiamato una sola volta,non ogni volta che viene caricata unapagina di amministrazione.Sarebbemeglio usare "switch_theme" come hookper l'attivazione deltema o "register_activation_hook"per l'attivazione delplugin.`add_theme_caps()` should be called one time only, not everytime an admin page is loaded. It would be better to use `switch_theme` as hook for theme activation or `register_activation_hook` on plugin activation.
- 14
- 2015-04-13
- d79
-
Bello!Mipiace usare wp cliper aggiungere lefunzionalità se sitratta di un sito completamentepersonalizzato/unicopoiché è un'azione che deveessereeseguita solo una volta.Nice! I like to use wp cli to add the capabilities if it's a completely custom/unique site since it's an action that only needs to happen once.
- 0
- 2017-12-01
- squarecandy
-
-
- 2013-07-30
IMHOnonmapparemai letue capacità. Assicurati di utilizzareilpluginmapmeta capperfarlo. http://codex.wordpress.org/Function_Reference/map_meta_cap
Hopassatogiornie giorni aprovare amapparemanualmentei miei limitipersonalizzati conil codice. Bastainstallare quelplugin,mapparei tuoi cappuccie disattivarlo una voltafunzionante. Se crei ruolipersonalizzati,avraibisogno delplug-in Members .
Ilmodoin cuiprovoper ASSICURARMI cheilmio ruolo abbia quelle capacità (a voltegiuri di sìmain realtànon lofai) crea unapagina di debug con:
if( !function_exists( 'current_user_has_role' ) ){ function current_user_has_role( $role ){ $current_user = new WP_User( wp_get_current_user()->ID ); $user_roles = $current_user->roles; $is_or_not = in_array( $role, $user_roles ); return $is_or_not; } }
Questoti mostrerà quali capacità haieffettivamente.
IMHO you never map your own capabilities. Make sure to use map meta cap plugin to do so. http://codex.wordpress.org/Function_Reference/map_meta_cap
I spent days trying to map my custom caps manually with code. Just install that plugin, map your caps and deactivate once working. If creating custom roles you WILL need Members plugin.
The way I test to MAKE sure my role has those capabilites (sometimes you swear you do but don't actually) make a debugging page with:
if( !function_exists( 'current_user_has_role' ) ){ function current_user_has_role( $role ){ $current_user = new WP_User( wp_get_current_user()->ID ); $user_roles = $current_user->roles; $is_or_not = in_array( $role, $user_roles ); return $is_or_not; } }
This will show you which capabilities you do in fact have.
-
- 2019-04-20
Peri tipi dipostpersonalizzati, NON suggerisco di utilizzare hook:
add_action( 'registered_post_type', 'your_func', 10, 2 );
invece suggerisco di utilizzare:
add_filter( 'register_post_type_args', 'your_func', 10, 2 ); function your_func( $args, $name ) { if ( $name == "your_custom_post_name" ) ... }
For Custom Post Types, I DON'T suggest using hook:
add_action( 'registered_post_type', 'your_func', 10, 2 );
instead I suggest using:
add_filter( 'register_post_type_args', 'your_func', 10, 2 ); function your_func( $args, $name ) { if ( $name == "your_custom_post_name" ) ... }
-
il suggerimento èbuono,manon risponde alla domanda.the suggestion is a good one, but it does not answer the question.
- 0
- 2019-11-11
- Aurovrata
Ho untipo dipostpersonalizzatoperil quale vorrei limitare l'accesso a determinati ruoli,tuttavia,hogià aggiunto contenuti utilizzandoiltipo dipostpersonalizzatoe ora devo renderli limitati. Capability_typeera "post"
Ciò che vabene visto cheil contenuto viene visualizzatonelbackend,tuttavia,oranon appena aggiungofunzionalitàil contenuto scompare dalbackend?
Hoprovato apersonalizzareiltipo di capacitàperincludere definizionipluraliper costruirne unamia,manon appena rimuovo o cambioi tipi di capacitànon c'èpiù!
codice completo:
L'ho anchetestato con untipo dipostpersonalizzato completamentenuovoe indipendentemente daltipo difunzionalità ottengo lo stessoproblema,adesempio anche se lo rimuovoe aggiungoilmiopersonalizzato: