No puedo obtenerlo para que mi rol de usuario para un proveedor pueda leer el tipo de envío de envíos. Aparece en su menú, pero cuando hace clic en él, no puede ver el mensaje de error de esta página .
Funciona si yo add_cap('read_posts')
pero no quiero que vean las publicaciones regulares solo el tipo de publicación de envíos.
Tengo un rol de usuario de proveedores con las siguientes capacidades.
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
)
)
Y he configurado el tipo de publicación para envíos con lo siguiente
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
fuente
fuente
add_role()
y las mayúsculasadd_cap()
?Respuestas:
Su tipo de publicación personalizado parece que está configurado correctamente. Funciona en mi instalación de prueba. Pruebe esto en lugar de cualquier código add_role y add_cap que esté usando actualmente. (Solo para fines de prueba. No lo use en el código de producción, por las razones que se detallan a continuación). Me está funcionando:
Es muy importante recordar que agregar funciones y capacidades de usuario en realidad ahorra datos a la base de datos. Entonces, si tenía una versión de su código antes que no funcionó, luego agregó algo que lo haría funcionar, podría no haber tenido efecto si todavía hay datos antiguos en su base de datos. add_role () devuelve nulo si el rol ya existe en la base de datos. Para el código de producción, en realidad debería usar los ganchos de activación y desactivación del complemento para estas cosas en lugar de ejecutarlo cada vez, de esta manera:
fuente
add_role()
yremove_role()
no debe ejecutarse en cada solicitud. Tenga en cuenta que una vez que se agrega un rol a la base de datos, no debe agregarlo nuevamente. Por lo general, agrega rolesregister_activation_hook
y elimina roles enregister_deactivation_hook
/register_unistall_hook
; Aparte de eso, debe ejecutarremove_role()
/add_role()
solo si realmente es necesario.En su objeto de rol, tiene la capacidad 'create_shipment' donde en realidad debería decir 'create_shipments'. Parece que puede faltar una 's' en su código cada vez que agrega esa capacidad.
fuente
Puedes probar:
fuente
Probar esto. 'dms_document' es el tipo de publicación personalizada.
fuente