Hey guys I’ve created this post type but when I click the publish button I receive the message:
You are not allowed to edit this post.
Have I done something wrong in my code to disallow anyone from publishing a post of this custom type? Here’s the code:
<?php
function image_post_type(){
$labels = array(
'name' => 'Images',
'singlular_name' => 'Image',
'add_new' => 'Add New',
'add_new_item' => 'Add New Image',
'edit_item' => 'Edit Image',
'new_item' => 'New Image',
'all_items' => 'All Images',
'view_item' => 'View Image',
'search_items' => 'Search Images',
'not_found' => 'No Images found',
'not_found_in_trash'=> 'No Images found in Trash',
'parent_item_colon' => '',
'menu_name' => 'Images'
);
$args = array(
'labels' => $labels,
'public' => true,
'exclude_from_search' => false,
'publicly_queryable' => true,
'show_ui' => true,
'show_in_nav_menus' => true,
'show_in_menu' => true,
'menu_position' => 1,
//'menu_icon' => 'icon32',
'capability_type' => 'post',
'map_meta_cap' => false,
'hierarchical' => false,
'supports' => array('title', 'editor', 'thumbnail', 'custom-fields'),
'register_meta_box_cb' => 'add_meta_box_callback',
'has_archive' => true,
'query_var' => true,
'can_export' => true
);
register_post_type('image_post', $args);
}
add_action('init', 'image_post_type');
function add_meta_box_callback(){
add_meta_box('image_variations', 'Image Variations', 'image_variations_callback', 'image_post', 'side', 'low');
}
function image_variations_callback(){
}
function add_image_post_type_to_query($query){
if(is_home() && $query->is_main_query()){
$query->set( 'post_type', array('post', 'page', 'image_post') );
}
return $query;
}
?>
Thanks in advance
The default for
map_meta_cap
is actually not false if you’re also passing in acapability_type
ofpost
orpage
, which you are.The following code is in WordPress Core’s post.php:
So by explicitly setting it to false, you were telling it not to use the capabilities of a
post
orpage
.By not setting it at all, you allowed the above code to set it to true.
Code just a few lines down, get_post_type_capabilities uses this flag for whether or not to use the default posts capabilities which gives you the permissions you’re looking for.
The CPT is now working. I’m not sure why it’s working but it is and here’s what happened for me to make it start working. Well I saw @hawkidoki’s “answer” and how he didn’t use variables so I reformatted mine to look the same (below) and ran it and it didn’t work until I commented out map_meta_cap:
Seeing this, I reverted back to my old code and uncommented map_meta_cap once again to get the same “You’re not allowed” message. Upon commenting it out again though it works fine and my final working code is:
Why though? How could map_meta_cap be causing this issue when it’s set to false? False is supposed to be the default value.
Thanks for all your help guys, especially you @vancoder!
Here is a working custom_post_type declaration. Try to modify it to fit your needs 🙂
Good luck sir!
Edit: More informations here – http://codex.wordpress.org/Function_Reference/register_post_type