Izin peran jenis pos khusus tidak akan membiarkan saya membaca

9

Saya tidak bisa mendapatkannya sehingga peran pengguna saya untuk pemasok dapat membaca jenis kiriman pengiriman. Itu muncul di menu mereka tetapi ketika Anda mengkliknya Anda mendapatkan Anda tidak diizinkan untuk melihat pesan kesalahan halaman ini .

Ini berfungsi jika saya add_cap('read_posts')tetapi saya tidak ingin mereka melihat tulisan biasa hanya jenis kiriman pengiriman.

Saya memiliki peran pengguna pemasok dengan kemampuan berikut.

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
        )

)

Dan saya telah menyiapkan jenis posting untuk pengiriman dengan berikut ini

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 );
Nicholas Koskowski
sumber
Saya sudah membaca ini berkali-kali ... mengikuti instruksi yang bisa saya lakukan. Masih mendapatkan Anda tidak diizinkan mengakses sampai saya memberikan izin create_shipments.
Nicholas Koskowski
3
Bisakah Anda membagikan kode tempat Anda menambahkan peran add_role()dan tutupnya add_cap()?
Mat
1
Apakah Anda mencoba untuk membiarkan pemasok membaca jenis posting ini di ujung depan atau di ujung belakang?
Myles
Dan apakah kode ini dalam plugin atau tema? Plugin lebih baik, tetapi bagaimanapun juga, dengan informasi lebih lanjut tentang pengaturan Anda, saya yakin saya dapat memberikan solusi yang lebih komprehensif untuk Anda
Myles

Jawaban:

4

Jenis pos khusus Anda sepertinya sudah diatur dengan benar. Ini berfungsi pada instalasi tes saya. Coba ini alih-alih add_role dan kode add_cap apa pun yang sedang Anda gunakan. (Hanya untuk tujuan pengujian. Jangan menggunakannya dalam kode produksi, karena alasan yang diuraikan di bawah ini.) Ini bekerja untuk saya:

function prefix_set_up_supplier_role(){
remove_role( 'supplier' );
add_role( 'supplier', 'Supplier', array(
        'read'                      => true,
        'edit_shipment'             => true,
        'read_shipment'             => true,
        'read_shipments'            => true,
        'delete_shipment'           => true,
        'delete_shipments'          => true,
        'edit_shipments'            => true,
        'edit_others_shipments'     => true,
        'publish_shipments'         => true,
        'read_private_shipments'    => true,
        'create_shipments'          => true,
    )
);
}
add_action( 'init', 'prefix_set_up_supplier_role' );

Sangat penting untuk diingat bahwa menambahkan peran dan kemampuan pengguna sebenarnya menyimpan data ke database. Jadi, jika Anda memiliki versi kode Anda sebelum itu tidak berfungsi, kemudian menambahkan sesuatu yang akan membuatnya berfungsi, itu mungkin tidak akan berpengaruh jika masih ada data lama di database Anda. add_role () mengembalikan null jika peran sudah ada dalam database. Untuk kode produksi, Anda harus benar-benar menggunakan pengaktifan plugin dan kait penonaktifan untuk hal ini alih-alih menjalankannya setiap saat, seperti ini:

register_activation_hook( __FILE__, 'prefix_activate' );
function prefix_activate(){
    add_role( 'supplier', 'Supplier', array(
        'read'                      => true,
        'edit_shipment'             => true,
        'read_shipment'             => true,
        'read_shipments'            => true,
        'delete_shipment'           => true,
        'delete_shipments'          => true,
        'edit_shipments'            => true,
        'edit_others_shipments'     => true,
        'publish_shipments'         => true,
        'read_private_shipments'    => true,
        'create_shipments'          => true,
    )
);
}

register_deactivation_hook( __FILE__, 'prefix_deactivate' );
function prefix_deactivate(){
    remove_role( 'supplier' );
}
Myles
sumber
2
add_role()dan remove_role()seharusnya tidak dieksekusi dalam setiap permintaan. Perhatikan bahwa setelah peran ditambahkan ke basis data, Anda tidak perlu menambahkannya lagi. Biasanya Anda menambahkan peran register_activation_hookdan menghapus peran di register_deactivation_hook/ register_unistall_hook; selain itu, Anda harus menjalankan remove_role()/ add_role()hanya jika itu benar-benar diperlukan.
cybmeta
Saya tahu, dan saya telah menyebutkan hal itu dalam jawaban saya juga. Tapi itu masih bisa menjadi cara cepat untuk mendiagnosis masalah dalam pengembangan sehingga Anda tidak perlu mengklik menonaktifkan dan kemudian mengaktifkan setiap kali Anda membuat perubahan pada kode. Kemudian, ketika berfungsi, pindahkan ke aktivasi dan penonaktifan kait
Myles
1
@cybmeta Itu benar. Saya mengedit jawaban saya untuk mencerminkan bagaimana praktik terbaik dapat diikuti.
Myles
0

Di objek peran Anda, Anda memiliki kemampuan 'create_shipment' di mana seharusnya itu sebenarnya mengatakan 'create_shipments'. Sepertinya ada 's' yang hilang dalam kode Anda di mana pun Anda menambahkan kemampuan itu.

Myles
sumber
0

Anda mungkin mencoba:

add_action( 'init', 'add_my_caps');
function add_my_caps() {
    global $wp_roles;

    if ( isset($wp_roles) ) {
        $wp_roles->add_cap( 'editor', 'edit_shipment' );
        $wp_roles->add_cap( 'editor', 'read_shipment' );
        $wp_roles->add_cap( 'editor', 'delete_shipment' );
        $wp_roles->add_cap( 'editor', 'publish_shipments' );
        $wp_roles->add_cap( 'editor', 'edit_shipments' );
        $wp_roles->add_cap( 'editor', 'edit_others_shipments' );
        $wp_roles->add_cap( 'editor', 'delete_shipments' );
        $wp_roles->add_cap( 'editor', 'delete_others_shipments' );
        $wp_roles->add_cap( 'editor', 'read_private_shipments' );
        ....
T.Todua
sumber
0

Coba ini. 'dms_document' adalah jenis posting khusus.

function jgd_add_role_caps() {
    // Add the roles you'd like to administer the custom post types
    $roles = array(
        'deity_user',
        'admin_user'
    );

    // Loop through each role and assign capabilities
    foreach($roles as $the_role) { 
        $role = get_role($the_role);

        $role->add_cap('read');
        $role->add_cap('read_dms_document');
        $role->add_cap('read_private_dms_documents');
        $role->add_cap('edit_dms_document');
        $role->add_cap('edit_dms_documents');
        $role->add_cap('edit_others_dms_documents');
        $role->add_cap('edit_published_dms_documents');
        $role->add_cap('publish_dms_documents');
        $role->add_cap('delete_others_dms_documents');
        $role->add_cap('delete_private_dms_documents');
        $role->add_cap('delete_dms_documents');
        $role->add_cap('delete_post_dms_documents');
        $role->add_cap('delete_published_dms_documents');
        $role->add_cap('delete_draft_dms_documents');
        $role->add_cap('delete_others_posts_dms_documents');
        $role->add_cap('delete_others_posts_dms_document');
        $role->add_cap('delete_posts_dms_documents');
        $role->add_cap('delete_posts_dms_document');
    }
}
add_action('admin_init','jgd_add_role_caps', 999);
James George Dunn
sumber