कस्टम पोस्ट प्रकार भूमिका अनुमतियाँ मुझे पढ़ने नहीं देंगी


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
PS

मैंने इसे कई बार पढ़ा है ... निर्देशों का पालन सब कुछ मैं कर सकता था। फिर भी जब तक आप create_shipments की अनुमति नहीं देते, तब तक आपको पहुंचने की अनुमति नहीं है।
निकोलस कोसकोव्स्की

3
क्या आप अपना कोड साझा कर सकते हैं जहां आप भूमिका add_role()और कैप जोड़ रहे हैं add_cap()?
Mat

1
क्या आप आपूर्तिकर्ता को इस पोस्ट प्रकार को फ्रंट एंड या बैक एंड पर पढ़ने देना चाहते हैं?
मायल्स

और क्या यह कोड एक प्लगइन या एक थीम में है? प्लगिन बेहतर है, लेकिन किसी भी तरह से, अपने सेटअप के बारे में अधिक जानकारी के साथ, मुझे यकीन है कि मैं आपके लिए और भी अधिक व्यापक समाधान प्रदान कर सकता हूं
Myles

जवाबों:


4

आपका कस्टम पोस्ट प्रकार ऐसा लगता है जैसे यह ठीक से सेट है। यह मेरे परीक्षण स्थापित पर काम करता है। जो भी वर्तमान में आप उपयोग कर रहे हैं, add_role और add_cap कोड के बजाय इसे आज़माएं। (केवल परीक्षण उद्देश्यों के लिए। नीचे दिए गए कारणों के लिए इसका उपयोग उत्पादन कोड में न करें।) यह मेरे लिए काम कर रहा है:

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_role () शून्य हो जाता है। उत्पादन कोड के लिए, आपको वास्तव में हर बार चलाने के बजाय इस सामान के लिए प्लगइन सक्रियण और निष्क्रिय हुक का उपयोग करना चाहिए, जैसे:

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()केवल अगर यह वास्तव में आवश्यक है।
साइबरमेट

मुझे पता है, और मैंने अपने उत्तर में भी इसका उल्लेख किया है। लेकिन यह अभी भी विकास में समस्याओं का निदान करने का एक त्वरित तरीका हो सकता है ताकि आपको निष्क्रिय करने के लिए क्लिक न करना पड़े और फिर हर बार जब आप कोड में बदलाव करते हैं तो सक्रिय हो जाएं। फिर, जब यह काम कर रहा है, तो इसे सक्रियण और निष्क्रिय करने के हुक पर ले जाएं
Myles

1
@cybmeta यह सच है। मैंने अपने उत्तर को यह दर्शाने के लिए संपादित किया कि सर्वोत्तम प्रथाओं का पालन कैसे किया जा सकता है।
माइल

0

आपकी भूमिका वस्तु में, आपके पास 'create_shipment' क्षमता होती है, जहाँ उसे वास्तव में 'create_shipments' कहना चाहिए। लगता है कि आपके कोड में कोई भी 's' गायब हो सकता है जहाँ भी आप उस क्षमता को जोड़ रहे हैं।


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_document' कस्टम पोस्ट प्रकार है।

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);
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.