web-dev-qa-db-de.com

Benutzerdefinierten Beitragstyp kann nicht veröffentlicht werden - "Sie dürfen diesen Beitrag nicht bearbeiten."

Hallo Leute, ich habe diesen Beitragstyp erstellt, aber wenn ich auf die Schaltfläche "Veröffentlichen" klicke, erhalte ich die folgende Nachricht:

Du darfst diesen Beitrag nicht bearbeiten.

Habe ich in meinem Code etwas falsch gemacht, um zu verhindern, dass jemand einen Beitrag dieses benutzerdefinierten Typs veröffentlicht? Hier ist der 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;
}
?>

Danke im Voraus

1
Connor

Die Standardeinstellung für map_meta_cap ist not false , wenn Sie auch einen capability_type von postoder übergeben pagename__, die Sie sind.

Der folgende Code befindet sich in Wordpress Core's post.php :

// 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;

Indem Sie ihn explizit auf false setzen, haben Sie ihn angewiesen, die Funktionen eines postnamens__ oder pagenamens__ nicht zu verwenden.

Indem Sie es überhaupt nicht setzen, haben Sie dem obigen Code erlaubt, es auf true zu setzen.

Code nur ein paar Zeilen nach unten , get_post_type_capabilities verwendet dieses Flag, um festzulegen, ob die Standardfunktionen für Posts verwendet werden sollen, mit denen Sie die gewünschten Berechtigungen erhalten.

1
Freddy

Das CPT funktioniert jetzt. Ich bin mir nicht sicher, warum es funktioniert, aber es funktioniert und hier ist, was für mich passiert ist, damit es funktioniert. Nun, ich habe die "Antwort" von @ hawkidoki gesehen und gesehen, dass er keine Variablen verwendet hat. Ich habe meine neu formatiert, damit sie gleich aussieht (siehe unten) und sie ausgeführt und sie hat nicht funktioniert, bis ich map_meta_cap auskommentiert habe.

<?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;
}
?>

Nachdem ich dies gesehen hatte, kehrte ich wieder zu meinem alten Code und unkommentiertem map_meta_cap zurück, um die gleiche Meldung "Du bist nicht erlaubt" zu erhalten. Wenn ich es wieder auskommentiere, obwohl es gut funktioniert und mein endgültiger Arbeitscode ist:

<?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;
}
?>

Warum allerdings? Wie könnte map_meta_cap dieses Problem verursachen, wenn es auf false gesetzt ist? Falsch soll der Standardwert sein.

Vielen Dank für all eure Hilfe, besonders für euch @vancoder!

0
Connor