質問: get_role( 'employee' ); $employees->add_cap( 'read' ); $employees->add_cap( 'edit_pms' ); $employees->add_cap( 'read_pms' ); $employees->add_cap( 'edit_pmss' ); $employees->add_cap( 'publish_pmss' ); $employees->add_cap( 'edit_published_pmss' ); } add_action( 'admin_init', 'add_theme_caps'); 問題カスタム投稿 'pms'を編集する前にcurrent_user_can( 'edit_pms')をチェックします1)デフォルトロール 'editor'はtrueを返します2)カスタムロール 'employee'(上記)はfalseを返します'pms'カスタム投稿タイプの機能をデバッグするには$ globals ['wp_post_types']を、従業員ロールを持つユーザーの機能をデバッグするにはget_userdata()を使用します。どちらも適切な機能を備えています。質問(2)のfalseを返します。ソース https://codex.wordpress.org/function_reference/register_post_type http://justintadlock.com/archives/ 2010/07/10 /カスタム投稿タイプのメタ機能
回答: register_post_type() 関数はmap_meta_capの引数としてポストタイプ名を取ります。デフォルトはpostです。詳しい洞察のためにget_post_type_capabilities()の内部を見てください。それは、それがどういう意味であるのかを理解するのに役立ちます。function get_post_type_capabilities( $args ) { if ( ! is_array( $args->capability_type ) ) $args->capability_type = array( $args->capability_type, $args->capability_type . 's' ); // singular base for meta capabilities, plural base for primitive capabilities. list( $singular_base, $plural_base ) = $args->capability_type; $default_capabilities = array( // meta capabilities 'edit_post' => 'edit_' . $singular_base, 'read_post' => 'read_' . $singular_base, 'delete_post' => 'delete_' . $singular_base, // primitive capabilities used outside of map_meta_cap(): 'edit_posts' => 'edit_' . $plural_base, 'edit_others_posts' => 'edit_others_' . $plural_base, 'publish_posts' => 'publish_' . $plural_base, 'read_private_posts' => 'read_private_' . $plural_base, ); // primitive capabilities used within map_meta_cap(): if ( $args->map_meta_cap ) { $default_capabilities_for_mapping = array( 'read' => 'read', 'delete_posts' => 'delete_' . $plural_base, 'delete_private_posts' => 'delete_private_' . $plural_base, 'delete_published_posts' => 'delete_published_' . $plural_base, 'delete_others_posts' => 'delete_others_' . $plural_base, 'edit_private_posts' => 'edit_private_' . $plural_base, 'edit_published_posts' => 'edit_published_' . $plural_base, ); $default_capabilities = array_merge( $default_capabilities, $default_capabilities_for_mapping ); } $capabilities = array_merge( $default_capabilities, $args->capabilities ); // post creation capability simply maps to edit_posts by default: if ( ! isset( $capabilities['create_posts'] ) ) $capabilities['create_posts'] = $capabilities['edit_posts']; // remember meta capabilities for future reference. if ( $args->map_meta_cap ) _post_type_meta_capabilities( $capabilities ); return (object) $capabilities; } それをデバッグするより良い方法は次のフックです。do_action( 'registered_post_type', $post_type, $args ); これを使用してください(登録後に正確に実行されます)。add_action( 'registered_post_type', function( $cpt, $args ) { $cpt === 'your_cpt_name' && var_dump( $args->capability_type, $args->cap // result of get_post_type_capabilities() ); }, 10, 2 ); your_cpt_nameを登録時に最初の引数として使用した実際の名前に置き換えます。また、ほとんどのユースケースでは、カスタム機能をチェックする必要はまったくありません。それらはそれがあるべきことを維持するのがはるかに困難です。代わりに、投稿タイプとデフォルトの機能をチェックすることをお勧めします。