web-dev-qa-db-fra.com

Impossible de publier le type de message personnalisé - "Vous n'êtes pas autorisé à modifier ce message."

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

1
Connor

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.

1
Freddy

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!

0
Connor