Ich kann es nicht erhalten, damit meine Benutzerrolle für einen Lieferanten den Sendungsposttyp lesen kann. Es wird in ihrem Menü angezeigt, aber wenn Sie darauf klicken , wird diese Seitenfehlermeldung nicht angezeigt.
Es funktioniert, wenn ich add_cap('read_posts')
aber nicht möchte, dass sie die regulären Posts nur den Sendungsposttyp anzeigen.
Ich habe eine Lieferantenbenutzerrolle mit den folgenden Funktionen.
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
)
)
Und ich habe den Post-Typ für Sendungen wie folgt eingerichtet
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
quelle
quelle
add_role()
und die Obergrenzen hinzufügenadd_cap()
?Antworten:
Ihr benutzerdefinierter Beitragstyp scheint ordnungsgemäß eingerichtet zu sein. Es funktioniert bei meiner Testinstallation. Versuchen Sie dies anstelle des derzeit verwendeten Codes add_role und add_cap. (Nur zu Testzwecken. Verwenden Sie es aus den unten aufgeführten Gründen nicht im Produktionscode.) Es funktioniert für mich:
Es ist sehr wichtig, sich daran zu erinnern, dass durch das Hinzufügen von Benutzerrollen und -funktionen tatsächlich Daten in der Datenbank gespeichert werden. Wenn Sie also zuvor eine Version Ihres Codes hatten, die nicht ganz funktioniert hat, und dann etwas hinzugefügt haben, das sie zum Funktionieren bringt, ist sie möglicherweise nicht wirksam geworden, wenn Ihre Datenbank noch alte Daten enthält. add_role () gibt null zurück, wenn die Rolle bereits in der Datenbank vorhanden ist. Für Produktionscode sollten Sie tatsächlich die Plugin-Aktivierungs- und Deaktivierungs-Hooks für dieses Zeug verwenden, anstatt es jedes Mal wie folgt auszuführen:
quelle
add_role()
undremove_role()
sollte nicht in jeder Anfrage ausgeführt werden. Beachten Sie, dass Sie eine Rolle nach dem Hinzufügen zur Datenbank nicht erneut hinzufügen müssen. Normalerweise fügen Sie Rollen hinzuregister_activation_hook
und entfernen Rollen aufregister_deactivation_hook
/register_unistall_hook
; Ansonsten sollten Sieremove_role()
/add_role()
nur ausführen, wenn es wirklich benötigt wird.In Ihrem Rollenobjekt haben Sie die Funktion 'create_shipment', in der eigentlich 'create_shipments' stehen sollte. Es scheint, als ob in Ihrem Code ein 's' fehlt, wo immer Sie diese Funktion hinzufügen.
quelle
Sie könnten versuchen:
quelle
Probieren Sie es aus. 'dms_document' ist der benutzerdefinierte Beitragstyp.
quelle