ক্ষমতা এবং কাস্টম পোস্ট প্রকার


30

আমার একটি কাস্টম পোস্ট টাইপ রয়েছে যা আমি নির্দিষ্ট কিছু ভূমিকার অ্যাক্সেসকে সীমাবদ্ধ রাখতে চাই, আমি ইতিমধ্যে কাস্টম পোস্ট প্রকারটি ব্যবহার করে সামগ্রী যুক্ত করেছি এবং এখন সেগুলি সীমাবদ্ধ করতে হবে। ক্ষমতা_প্রকারটি ছিল 'পোস্ট'

'capability_type' => 'post'

বিষয়বস্তু ব্যাকএন্ডে প্রদর্শিত হওয়ার সাথে সাথে কোনটি ঠিক আছে, এখনই আমি কোনও ক্ষমতা যুক্ত করার সাথে সাথে সামগ্রীটি ব্যাকএন্ড থেকে অদৃশ্য হয়ে যায়?

আমি নিজের নির্মাণের জন্য বহুগুণ সংজ্ঞা অন্তর্ভুক্ত করার জন্য সক্ষমতার ধরণটি কাস্টমাইজ করার চেষ্টা করেছি তবে যত তাড়াতাড়ি আমি সরিয়েছি বা সক্ষমতার ধরণগুলি পরিবর্তন করেছি তা চলে গেছে!

সম্পূর্ণ কোড:

add_action( 'init', 'register_cpt_gallery' );

function register_cpt_gallery() {
$labels = array( 
    'name' => _x( 'Galleries', 'gallery' ),
    'singular_name' => _x( 'Gallery', 'gallery' ),
    'add_new' => _x( 'Add New', 'gallery' ),
    'add_new_item' => _x( 'Add New Gallery', 'gallery' ),
    'edit_item' => _x( 'Edit Gallery', 'gallery' ),
    'new_item' => _x( 'New Gallery', 'gallery' ),
    'view_item' => _x( 'View Gallery', 'gallery' ),
    'search_items' => _x( 'Search Galleries', 'gallery' ),
    'not_found' => _x( 'No galleries found', 'gallery' ),
    'not_found_in_trash' => _x( 'No galleries found in Trash', 'gallery' ),
    'parent_item_colon' => _x( 'Parent Gallery:', 'gallery' ),
    'menu_name' => _x( 'Galleries', 'gallery' ),
);

$args = array( 
    'labels' => $labels,
    'hierarchical' => true,
    'description' => 'Image galleries for teachers classes',
    'supports' => array( 'title', 'editor', 'author'),

    'public' => true,
    'show_ui' => true,
    'show_in_menu' => true,

    'menu_icon' => get_bloginfo('template_url') . '/images/imagegallery.png',
    'show_in_nav_menus' => true,
    'publicly_queryable' => true,
    'exclude_from_search' => false,
    'has_archive' => true,
    'query_var' => true,
    'can_export' => true,
    'rewrite' => true,
    'capability_type' => 'post',
    'capabilities' => array(
        'edit_post' => 'edit_gallery',
        'edit_posts' => 'edit_galleries',
        'edit_others_posts' => 'edit_other_galleries',
        'publish_posts' => 'publish_galleries',
        'read_post' => 'read_gallery',
        'read_private_posts' => 'read_private_galleries',
        'delete_post' => 'delete_gallery'
    )
);

register_post_type( 'gallery', $args );
}

আমি এটি সম্পূর্ণ নতুন কাস্টম পোস্ট প্রকারের সাথেও পরীক্ষা করেছি এবং সামর্থ্যের ধরণ নির্বিশেষে আমি একই সমস্যাটি পেয়েছি যেমন আমি এটিকে অপসারণ করি এবং আমার কাস্টমটি যুক্ত করি:

'capability_type' => array('movie','movies');

উত্তর:


40

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

add_action( 'init', 'register_cpt_gallery' );

function register_cpt_gallery() {
$labels = array( 
    'name' => _x( 'Galleries', 'gallery' ),
    'singular_name' => _x( 'Gallery', 'gallery' ),
    'add_new' => _x( 'Add New', 'gallery' ),
    'add_new_item' => _x( 'Add New Gallery', 'gallery' ),
    'edit_item' => _x( 'Edit Gallery', 'gallery' ),
    'new_item' => _x( 'New Gallery', 'gallery' ),
    'view_item' => _x( 'View Gallery', 'gallery' ),
    'search_items' => _x( 'Search Galleries', 'gallery' ),
    'not_found' => _x( 'No galleries found', 'gallery' ),
    'not_found_in_trash' => _x( 'No galleries found in Trash', 'gallery' ),
    'parent_item_colon' => _x( 'Parent Gallery:', 'gallery' ),
    'menu_name' => _x( 'Galleries', 'gallery' ),
);

$args = array( 
    'labels' => $labels,
    'hierarchical' => true,
    'description' => 'Image galleries for teachers classes',
    'supports' => array( 'title', 'editor', 'author'),
    'public' => true,
    'show_ui' => true,
    'show_in_menu' => true,
    'menu_icon' => get_bloginfo('template_url') . '/images/imagegallery.png',
    'show_in_nav_menus' => true,
    'publicly_queryable' => true,
    'exclude_from_search' => false,
    'has_archive' => true,
    'query_var' => true,
    'can_export' => true,
    'rewrite' => true,
    'capabilities' => array(
        'edit_post' => 'edit_gallery',
        'edit_posts' => 'edit_galleries',
        'edit_others_posts' => 'edit_other_galleries',
        'publish_posts' => 'publish_galleries',
        'read_post' => 'read_gallery',
        'read_private_posts' => 'read_private_galleries',
        'delete_post' => 'delete_gallery'
    ),
    // as pointed out by iEmanuele, adding map_meta_cap will map the meta correctly 
    'map_meta_cap' => true
);

register_post_type( 'gallery', $args );
}

অতিরিক্ত ক্ষমতাগুলি 'প্রশাসক' সহ ব্যাকএন্ডে কাজ করার অনুমতিগুলির জন্য একটি ভূমিকার সাথে যুক্ত করা উচিত - উদাহরণস্বরূপ:

function add_theme_caps() {
    // gets the administrator role
    $admins = get_role( 'administrator' );

    $admins->add_cap( 'edit_gallery' ); 
    $admins->add_cap( 'edit_galleries' ); 
    $admins->add_cap( 'edit_other_galleries' ); 
    $admins->add_cap( 'publish_galleries' ); 
    $admins->add_cap( 'read_gallery' ); 
    $admins->add_cap( 'read_private_galleries' ); 
    $admins->add_cap( 'delete_gallery' ); 
}
add_action( 'admin_init', 'add_theme_caps');

আমি আশা করি এটি অন্যের জন্য দরকারী।


11
add_theme_caps()কেবলমাত্র একবারে ডাকা উচিত, প্রতি বারে কোনও প্রশাসক পৃষ্ঠা লোড হওয়ার পরে নয়। switch_themeথিম অ্যাক্টিভেশন বা register_activation_hookপ্লাগইন অ্যাক্টিভেশনের জন্য হুক হিসাবে ব্যবহার করা ভাল ।
d79

নিস! আমি ক্ষমতাগুলি যুক্ত করতে ডাব্লুপিএইচ ক্লিপ ব্যবহার করতে চাই যদি এটি সম্পূর্ণ কাস্টম / অনন্য সাইট হয় কারণ এটি এমন একটি ক্রিয়া যা কেবল একবার ঘটতে হবে।
স্কয়ারকাণ্ডি

8

যোগ করুন

map_meta_cap => true

আপনার $ আরোগুলির অ্যারেতে। দেখুন এখানে , আরো জন্য। আশা করি এটা সাহায্য করবে!


1
এটি আমি যা ভেবেছিলাম তা কিন্তু সম্পূর্ণরূপে নয়।
এরিকমন্ড

এটি আমার জন্য কাজ করেছিল
শিক्यो

1

আইএমএইচও আপনি নিজের ক্ষমতা কখনই ম্যাপ করবেন না। এটি করার জন্য মানচিত্রের মেটা ক্যাপ প্লাগইনটি ব্যবহার নিশ্চিত করুন। http://codex.wordpress.org/Function_Reference/map_meta_cap

কোড সহ ম্যানুয়ালি আমার কাস্টম ক্যাপগুলি ম্যাপ করার চেষ্টা করে দিন কাটিয়েছি। কেবলমাত্র সেই প্লাগইনটি ইনস্টল করুন, আপনার ক্যাপগুলি ম্যাপ করুন এবং একবার কাজ করার পরে নিষ্ক্রিয় করুন। কাস্টম ভূমিকা তৈরি করার ক্ষেত্রে আপনাকে সদস্য প্লাগইন লাগবে ।

যেভাবে আমি পরীক্ষা করে দেখি যে আমার ভূমিকার মধ্যে সেই ক্যাপাবিল রয়েছে (কখনও কখনও আপনি শপথ করে থাকেন তবে বাস্তবে না) এর সাথে একটি ডিবাগিং পৃষ্ঠা তৈরি করুন:

    if( !function_exists( 'current_user_has_role' ) ){
        function current_user_has_role( $role ){
            $current_user = new WP_User( wp_get_current_user()->ID );
            $user_roles = $current_user->roles;
            $is_or_not = in_array( $role, $user_roles );
            return $is_or_not;
        }
    }

এটি আপনাকে দেখায় যে আপনার আসলে কী ক্ষমতা রয়েছে।


-1

কাস্টম পোস্ট প্রকারের জন্য, আমি হুক ব্যবহারের পরামর্শ দিই না :

add_action( 'registered_post_type', 'your_func', 10, 2 );

পরিবর্তে আমি ব্যবহার করার পরামর্শ দিচ্ছি:

add_filter( 'register_post_type_args', 'your_func', 10, 2 );
function your_func( $args, $name ) 
{
   if ( $name == "your_custom_post_name" ) 
   ...
}

পরামর্শটি ভাল, তবে এটি প্রশ্নের উত্তর দেয় না।
অরওব্রত
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.