web-dev-qa-db-ja.com

特定の投稿タイプが特定のユーザーロール(例:作者)によって読まれたり追加されたりするのを制限するにはどうすればいいですか?

管理領域の投稿タイプへのアクセスを特定のユーザーロールに制限する方法はあまりわかりません。

私の場合は、 "著者"に見せたくない "サプライヤ"などの投稿タイプがあります。

デフォルトでWPは著者が自分のコンテンツを閲覧、追加、編集することを可能にします。しかし、私は私の作者が "サプライヤ"を追加したり、他の管理者からのエントリを閲覧したりしたくはありません。

私はWordpressのコードとコーデックスを調べました。 http://codex.wordpress.org/Function_Reference/register_post_type

register_post_type( 'supplier', $args )には次のように$ argsで定義しようとしたパラメータがあるようです。もちろん私の投稿タイプがうまく機能しているので、ここでリストする必要はないと思う他の変数もあります。

     'capabilities'          => array( 'edit_others_posts' ),
     'map_meta_cap'          => true,

私は"map_meta_cap"パラメータを完全に理解していません - 私は'edit_others_posts'を指示することによって単純な作者による「サプライヤ」のアクセスを禁止するのに十分であった(実際には他の投稿を編集できません)。私はこれをテストしたがうまくいかない。作成者は、まだ管理領域のすべての「サプライヤ」コンテンツを表示し、まるでブログ投稿のようにサプライヤを追加できます。

作成者(または他の特定のユーザーロールまたは特定の機能を持たないユーザー)が、自分が作成した特定のカスタム投稿タイプの下でコンテンツにアクセスして追加することを防ぐ方法を教えてください。

ありがとうございました

1
unfulvio

あなたの質問に対する解決策としては、register_post_type引数にcapability_typeパラメータを使用してください。そして、特定の機能をユーザーに付与してください。たとえば、'capability_type' => 'supplier'を設定した場合は、edit_supplier機能をすべての管理者にのみ付与します。

もっと詳しく

capabilitiesは、'edit_post' => 'edit_supplier'の形式で機能の配列を取ります

これは基本的に、コアコードが以前にedit_post機能を使用していたところはどこでもedit_supplierを使用することを意味します(管理者を含むすべてのユーザーにedit_supplier機能を付与する必要があります。

capabilities配列を提供せず、&map_meta_capがtrueの場合、wordpressは提供されたcapability_type値からデフォルトのcapabilities配列を生成します。

[edit_post]      => "edit_{$capability_type}"
[read_post]      => "read_{$capability_type}"
[delete_post]        => "delete_{$capability_type}"
[edit_posts]         => "edit_{$capability_type}s"
[edit_others_posts]  => "edit_others_{$capability_type}s"
[publish_posts]      => "publish_{$capability_type}s"
[read_private_posts]     => "read_private_{$capability_type}s"
[delete_posts]           => "delete_{$capability_type}s"
[delete_private_posts]   => "delete_private_{$capability_type}s"
[delete_published_posts] => "delete_published_{$capability_type}s"
[delete_others_posts]    => "delete_others_{$capability_type}s"
[edit_private_posts]     => "edit_private_{$capability_type}s"
[edit_published_posts]   => "edit_published_{$capability_type}s"

{$capability_type}は指定した値です。 map_meta_capがfalseの場合、wordpressはcapability_typeパラメータを完全に無視します(または 'post'と見なしてからmap_meta_capを使用します)。

4
Mridul Aggarwal