Je ne peux pas l'obtenir afin que mon rôle d'utilisateur pour un fournisseur puisse lire le type de publication des expéditions. Il apparaît dans leur menu, mais lorsque vous cliquez dessus, vous n'êtes pas autorisé à afficher ce message d'erreur de page .
Cela fonctionne si je add_cap('read_posts')
mais je ne veux pas qu'ils voient les publications régulières uniquement le type de publication des expéditions.
J'ai un rôle d'utilisateur fournisseur avec les capacités suivantes.
WP_Role Object
(
[name] => supplier
[capabilities] => Array
(
[read] => 1
[edit_shipment] => 1
[read_shipment] => 1
[edit_others_shipments] => 1
[publish_shipments] => 1
[read_private_shipments] => 1
[edit_shipments] => 1
[create_shipment] => 1
[read_shipments] => 1
)
)
Et j'ai configuré le type de message pour les envois avec les éléments suivants
function shipment_post_type() {
$labels = array(
'name' => _x( 'Shipments', 'Post Type General Name', 'sage' ),
'singular_name' => _x( 'Shipment', 'Post Type Singular Name', 'sage' ),
'menu_name' => __( 'Shipments', 'sage' ),
'name_admin_bar' => __( 'Shipments', 'sage' ),
'archives' => __( 'Shipment Archives', 'sage' ),
'parent_item_colon' => __( 'Parent shipment:', 'sage' ),
'all_items' => __( 'All shipments', 'sage' ),
'add_new_item' => __( 'Add New shipment', 'sage' ),
'new_item' => __( 'New shipment', 'sage' ),
'edit_item' => __( 'Edit shipment', 'sage' ),
'update_item' => __( 'Update shipment', 'sage' ),
'view_item' => __( 'View shipment', 'sage' ),
'search_items' => __( 'Search shipments', 'sage' ),
'not_found' => __( 'Not found', 'sage' ),
'not_found_in_trash' => __( 'Not found in Trash', 'sage' ),
'featured_image' => __( 'Featured Image', 'sage' ),
'set_featured_image' => __( 'Set shipment image', 'sage' ),
'remove_featured_image' => __( 'Remove shipment image', 'sage' ),
'use_featured_image' => __( 'Use as shipment image', 'sage' ),
'insert_into_item' => __( 'Insert into shipment', 'sage' ),
'uploaded_to_this_item' => __( 'Uploaded to this shipment', 'sage' ),
'items_list' => __( 'shipments list', 'sage' ),
'items_list_navigation' => __( 'Constests list navigation', 'sage' ),
'filter_items_list' => __( 'Filter shipments list', 'sage' ),
);
$args = array(
'label' => __( 'shipments', 'sage' ),
'description' => __( 'Manage all shipments, sweepstakes and giveaways.', 'sage' ),
'labels' => $labels,
'supports' => array( 'revisions' ),
'taxonomies' => array( '' ),
'hierarchical' => false,
'public' => true,
'show_ui' => true,
'show_in_menu' => true,
'menu_position' => 5,
'menu_icon' => 'dashicons-archive',
'show_in_admin_bar' => true,
'show_in_nav_menus' => false,
'can_export' => true,
'has_archive' => false,
'exclude_from_search' => true,
'publicly_queryable' => true,
'map_meta_cap' => true,
'capabilities' => array(
'edit_post' => 'edit_shipment',
'read_post' => 'read_shipment',
'read_posts' => 'read_shipments',
'delete_post' => 'delete_shipment',
'delete_posts' => 'delete_shipments',
'edit_posts' => 'edit_shipments',
'edit_others_posts' => 'edit_others_shipments',
'publish_posts' => 'publish_shipments',
'read_private_posts' => 'read_private_shipments',
'create_posts' => 'create_shipments',
),
);
register_post_type( 'shipment', $args );
}
add_action( 'init', 'shipment_post_type', 0 );
custom-post-types
user-roles
capabilities
Nicholas Koskowski
la source
la source
add_role()
et les majusculesadd_cap()
?Réponses:
Votre type de publication personnalisé semble avoir été correctement configuré. Cela fonctionne sur mon installation de test. Essayez ceci au lieu du code add_role et add_cap que vous utilisez actuellement. (À des fins de test uniquement. Ne l'utilisez pas dans le code de production, pour les raisons décrites ci-dessous.) Cela fonctionne pour moi:
Il est très important de se rappeler que l'ajout de rôles et de capacités utilisateur enregistre en fait des données dans la base de données. Donc, si vous aviez une version de votre code auparavant qui ne fonctionnait pas tout à fait, puis que vous aviez ajouté quelque chose qui le ferait fonctionner, il se pourrait qu'elle ne prenne pas effet s'il y avait encore d'anciennes données dans votre base de données. add_role () renvoie null si le rôle existe déjà dans la base de données. Pour le code de production, vous devriez réellement utiliser les crochets d'activation et de désactivation du plugin pour ce genre de choses au lieu de l'exécuter à chaque fois, comme ceci:
la source
add_role()
etremove_role()
ne doit pas être exécuté dans chaque demande. Notez qu'une fois qu'un rôle est ajouté à la base de données, vous ne devez pas l'ajouter à nouveau. Habituellement, vous ajoutezregister_activation_hook
et supprimez des rôles surregister_deactivation_hook
/register_unistall_hook
; à part cela, vous devez exécuterremove_role()
/add_role()
uniquement si cela est vraiment nécessaire.Dans votre objet de rôle, vous avez la capacité «create_shipment» où il devrait en fait dire «create_shipments». Il semble qu'il puisse y avoir un «s» manquant dans votre code où que vous ajoutiez cette capacité.
la source
Vous pourriez essayer:
la source
Essayez ceci. 'dms_document' est le type de publication personnalisé.
la source