web-dev-qa-db-ja.com

カスタム投稿タイプを公開できません - 「この投稿を編集することはできません」

私はこの投稿の種類を作成しましたが、[公開]ボタンをクリックするとメッセージが表示されます。

この投稿を編集することはできません。

誰かがこのカスタムタイプの投稿を公開できないようにするために、コード内で何か間違ったことをしましたか?これがコードです:

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

前もって感謝します

1
Connor

map_meta_capのデフォルトは、実際にはnotfalseです。 postまたはpagecapability_typeも渡しているのであれば、それはあなたです。

次のコードは Wordpress Coreの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;

したがって、明示的にfalseに設定することで、postまたはpageの機能を使用しないように指示していました。

まったく設定しないことで、上記のコードでtrueに設定できるようになりました。

数行下のコード get_post_type_capabilities では、このフラグを使用します。あなたが探している許可をあなたに与えるデフォルトの投稿機能を使用しないこと。

1
Freddy

CPTは現在機能しています。なぜそれがうまくいっているのか私にはわからないが、それはそうであり、これが私がそれをうまく始めさせるために起こったことである。 @ hawkidokiの「答え」と、彼が変数を使用していない方法を見たので、同じように見て私のフォーマットを変更して実行し、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;
}
?>

これを見て、私は同じ "あなたは許可されていません"というメッセージを得るために私の古いコードとコメントアウトされていないmap_meta_capに戻りました。それはうまく動作しますが、私の最終的な作業コードは次のとおりですが、もう一度コメントアウトすると:

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

なぜだ? falseに設定されている場合、map_meta_capがどのようにこの問題を引き起こす可能性がありますか?デフォルト値はFalseです。

すべての助けてくれてありがとう、特にあなた@vancoder!

0
Connor