কাস্টম পোস্ট ধরণের ভূমিকা অনুমতিগুলি আমাকে পড়তে দেয় না


9

আমি এটি পেতে পারি না যাতে সরবরাহকারীর জন্য আমার ব্যবহারকারীর ভূমিকা শিপমেন্টের পোস্টের ধরণটি পড়তে পারে। এটি তাদের মেনুতে প্রদর্শিত হবে তবে আপনি এটিতে ক্লিক করলে আপনাকে এই পৃষ্ঠার ত্রুটি বার্তাটি দেখার অনুমতি দেওয়া হয় না

এটি কাজ করে যদি আমি add_cap('read_posts')তবে আমি চাই না যে তারা কেবল শিপমেন্ট পোস্টের ধরণের নিয়মিত পোস্টগুলি দেখতে পারে।

নিম্নলিখিত সক্ষমতা সহ আমার সরবরাহকারী ব্যবহারকারী ভূমিকা রয়েছে।

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
        )

)

এবং আমি নীচের সাথে শিপমেন্ট জন্য পোস্ট টাইপ সেট আপ করেছি

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 );

এই সমাধানটি দেখুন: wordpress.stackexchange.com/a/108375/38771
পিএস

আমি এই একাধিকবার পড়েছি ... আমি যা করতে পারি তার সব নির্দেশনা অনুসরণ করেছি। তবুও আপনি যতক্ষণ না আমি ক্রিয়েটিপশনগুলি অনুমতি না দেয় ততক্ষণ আপনি অ্যাক্সেসের অনুমতি পাবেন না।
নিকোলাস কোস্কোভস্কি

3
আপনি যেখানে নিজের কোডটি add_role()এবং ক্যাপগুলি সাথে যুক্ত করছেন সেখানে কি আপনার কোডটি ভাগ করতে পারেন add_cap()?
মাদুর

1
আপনি কি সরবরাহকারীকে এই পোস্টের ধরণটি সামনের প্রান্তে বা পিছনের দিকে পড়তে দেওয়ার চেষ্টা করছেন?
মাইলস

এবং এই কোডটি কি কোনও প্লাগইন বা থিমে রয়েছে? আপনার সেটআপ সম্পর্কে আরও তথ্যের সাথে প্লাগইন আরও ভাল তবে আমি নিশ্চিত যে আমি আপনার জন্য আরও ব্যাপক সমাধান সরবরাহ করতে পারব
মাইলেস

উত্তর:


4

আপনার কাস্টম পোস্টের प्रकारটি দেখে মনে হচ্ছে এটি সঠিকভাবে সেট আপ হয়েছে। এটি আমার পরীক্ষা ইনস্টল করে কাজ করে। আপনি বর্তমানে যেটি অ্যাড_রোল এবং অ্যাড_ক্যাপ কোড ব্যবহার করছেন তার পরিবর্তে এটি ব্যবহার করে দেখুন। (কেবল পরীক্ষার উদ্দেশ্যে। নীচে বর্ণিত কারণের জন্য এটি উত্পাদন কোডে ব্যবহার করবেন না)) এটি আমার পক্ষে কাজ করছে:

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' );

এটি মনে রাখা খুব গুরুত্বপূর্ণ যে ব্যবহারকারীর ভূমিকা এবং দক্ষতা যুক্ত করা ডাটাবেসে ডেটা সংরক্ষণ করে। সুতরাং এটির আগে যদি আপনার কোডটির কোনও সংস্করণ থাকে তবে এটি কার্যকরভাবে কাজ না করে, তবে এমন কিছু যুক্ত করে যা এটি কার্যকর করে তোলে, আপনার ডাটাবেজে এখনও পুরানো ডেটা থাকলে তা কার্যকর না হতে পারে। add_rol () ভূমিকা ইতিমধ্যে ডাটাবেসে উপস্থিত থাকলে নাল ফেরায়। প্রোডাকশন কোডের জন্য, এই জিনিসটি প্রতিবার চালানোর পরিবর্তে আপনার আসলে প্লাগিন অ্যাক্টিভেশন এবং নিষ্ক্রিয় হুকগুলি ব্যবহার করা উচিত:

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' );
}

2
add_role()এবং remove_role()প্রতিটি অনুরোধে কার্যকর করা উচিত নয়। মনে রাখবেন যে একবার ডাটাবেসে কোনও ভূমিকা যুক্ত হয়ে গেলে আপনি এটিকে আর যুক্ত করতে পারবেন না। সাধারণত আপনি ভূমিকাগুলি register_activation_hookজুড়েন এবং register_deactivation_hook/ এ ভূমিকাগুলি মুছে ফেলেন register_unistall_hook; অন্য যে, আপনি চালানো উচিত remove_role()/ add_role()শুধুমাত্র যদি এটা সত্যিই প্রয়োজন হয়।
সাইবমেটা

আমি জানি, এবং আমি আমার উত্তরে এটি উল্লেখ করেছি। তবে এটি এখনও বিকাশে সমস্যাগুলি নির্ণয়ের একটি দ্রুত উপায় হতে পারে যাতে আপনাকে নিষ্ক্রিয় করতে ক্লিক করতে হবে না এবং তারপরে কোডটিতে প্রতিবার পরিবর্তন করার পরে আপনাকে সক্রিয় করতে হবে। তারপরে, যখন এটি কাজ করছে, সক্রিয়করণ এবং নিষ্ক্রিয়করণ হুকগুলিতে সরিয়ে দিন
মাইলেস

1
@cybmeta এটি সত্য। সেরা অনুশীলনগুলি কীভাবে অনুসরণ করা যায় তা প্রতিবিম্বিত করতে আমি আমার উত্তর সম্পাদনা করেছি।
মাইলস

0

আপনার ভূমিকা অবজেক্টে, আপনার 'সক্ষমতা' তৈরি করতে হবে যেখানে এটি আসলে 'ক্রিয়েট_শিপমেন্টস' বলে say দেখে মনে হচ্ছে আপনার কোডটিতে যেখানেই এই সক্ষমতা যুক্ত হচ্ছে সেখানে কোনও 'মিস' থাকতে পারে।


0

আপনি চেষ্টা করতে পারেন:

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' );
        ....

0

এটি চেষ্টা করে দেখুন। 'dms_docament' হ'ল কাস্টম পোস্ট প্রকার।

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);
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.