Salut les gars, j'ai créé ce type de message mais lorsque je clique sur le bouton Publier, je reçois le message:
Vous n'êtes pas autorisé à modifier ce message.
Ai-je fait quelque chose de mal dans mon code pour empêcher quiconque de publier un article de ce type personnalisé? Voici le 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;
}
?>
Merci d'avance
La valeur par défaut pour map_meta_cap
est en fait not false si vous transmettez également un capability_type
de post
ou page
, ce que vous êtes.
Le code suivant se trouve dans le post.php de Wordpress Core:
// Back compat with quirky handling in version 3.0. #14122
if ( empty( $args->capabilities ) && null === $args->map_meta_cap && in_array( $args->capability_type, array( 'post', 'page' ) ) )
$args->map_meta_cap = true;
Ainsi, en le fixant explicitement à false , vous lui avez dit de ne pas utiliser les fonctionnalités de post
ou page
.
En ne le définissant pas du tout, vous avez autorisé le code ci-dessus à le définir sur true .
Code seulement quelques lignes plus bas , get_post_type_capabilities utilise cet indicateur pour indiquer s’il faut ou non utiliser les fonctionnalités de publication par défaut qui vous donnent les autorisations que vous recherchez.
Le CPT fonctionne maintenant. Je ne suis pas sûr de savoir pourquoi cela fonctionne, mais c'est le cas et voici ce qui m'est arrivé pour que cela commence à fonctionner. Eh bien, j'ai vu la "réponse" de @ hawkidoki et comment il n'a pas utilisé de variables, j'ai donc reformaté le mien pour qu'il soit identique (ci-dessous) et l'ai exécuté. Cela n'a pas fonctionné tant que je n'ai pas commenté map_meta_cap :
<?php
function image_post_type(){
register_post_type('image_post', array(
'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'
),
'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
)
);
}
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;
}
?>
Voyant cela, je suis retourné à mon ancien code et map_meta_cap non commenté à nouveau pour obtenir le même message "Vous n'êtes pas autorisé". En le commentant à nouveau bien que cela fonctionne bien et mon code de travail final est:
<?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;
}
?>
Pourquoi si? Comment map_meta_cap pourrait-il être à l'origine de ce problème lorsqu'il est défini sur false? False est supposé être la valeur par défaut.
Merci pour toute votre aide les gars, en particulier vous @vancoder!