web-dev-qa-db-ja.com

メンバーにカスタム投稿タイプへのアクセスのみを許可します。自分の投稿のみを編集する権限

OKこれを攻撃するための最善の方法を探しています。

私はPHPとWordPressのカスタムメタフィールドを使ってカスタム投稿タイプを作ることにとても満足しています。

これが私がやっているところです。

  1. ユーザーはデフォルトで登録し、加入者に設定されます。
  2. ユーザーがカスタム投稿タイプに対する権限を持つように管理者に要求します。
  3. 管理者はユーザーに "Shop Owner"などの別の権限名を割り当てます。
  4. ユーザーはカスタム投稿タイプを見ることができ、この投稿タイプにエントリを作成できます。
  5. ユーザーは自分の投稿を表示および編集することしかできません。

私は以下について助けが必要です。

  1. 「Shop Owner」という新しい「ロール」を作成する方法
  2. カスタムの投稿タイプを表示してアクセスするためだけに、そのロールに正しい権限を付与する方法。
  3. ユーザーがこのカスタム投稿タイプに対する自分の投稿を表示および編集できるようにするだけです。

理想的には、これはすべてwp-adminから行われることを望みますが、私は自分がしている有限の制御を得るためにこれのためのフロントエンドを構築する必要があるかもしれないと思います。

どんな入力でも大歓迎です。

敬具

29
Brady

Justin Tadlockのプラグイン " Members "を使用してください。カスタムロールを追加するだけでなく、新しいロールを作成したり既存のロールを編集したりすることもできます。あなたがしなければならないだろうすべての仕事は数回のクリックに降ろすことができます。

ZaMooseの回答に対するあなたのコメントで、あなたは「自分自身で機能を書くことを望んでいるので、私はすべてを完全に制御できる」と言ったことを私は知っています。それはオープンソースソフトウェアのすべての点を見逃しています。 Justin Tadlockが彼のプラグインをリリースしたので、あなたはそれを正確に使うことができるのであなたはすべてを完全にコントロールすることができます。

もしあなたが本当に 本当に 自分自身の時間の何百時間もの時間を無駄にしてホイールを再発明したいのであれば、私はあなたを止めることはできません。あなたが欲しいもの。

あなたが望むことをするプラグインを手に入れたら、それが 'post'、 'page'、または他の何か以外を言うようにあなたの投稿タイプ登録関数の'map_meta_cap'フラグをtrue'capability_type'フラグに変える必要があるでしょう「予約済み」タイプ。次に、投稿の代わりに自分の機能タイプを使用して、投稿に関連するすべての機能(edit_postsedit_others_postspublish_postsなど)を複製します。必ずこれらすべての権限を管理者に割り当て(これを行うまで投稿の種類を確認することはできません)、自分の投稿の種類に対する '投稿者'の役割の機能を真似て自分の役割を作成します。

例えば、あなたの能力タイプがfoobarsであったとしたら、 '店主'にedit_foobarsdelete_foobars、そしてreadの能力を与えたいと思うでしょう。そのようにして彼らは彼ら自身のドラフトfoobarsを作成し、それらのドラフトを削除することができますが、彼らはpublish_foobars能力を持っていないので、彼らは承認のためにそれらを提出しなければなりません。彼らはedit_published_foobarsを持っていないので、承認されたfoobarへのすべての修正は承認されなければなりません。

21
John P Bloch

登録投稿タイプには「capabilities」という名前のパラメーターがあるので、例えば

'capability' => 'organize_shop',

http://codex.wordpress.org/Function_Reference/register_post_type

新しいユーザー/ロール/機能を作成するには、簡単な例としてadd_role、add_capを使用します。

// Add the role to WordPress list of roles
// Then add the capability 'organize_shop' to the 'shop_owner' role
$role = add_role( 'shop_owner', 'Shop Owner', ['edit_posts' => true]));
$role->add_cap( 'organize_shop' );


// If 'shop_owner' already exists make `$wp_roles` visible then 
// add the capability 'organize_shop' to the 'Show Owner' role
public $wp_roles;
$wp_roles->add_cap( 'shop_owner', 'organize_shop' );

19
Wyck

実際のコンテンツ送信を処理するために、 Gravity Forms または TDO Mini Forms を検討することを検討しましたか。それらはそれぞれ、ユーザーが投稿したコンテンツを巧みに処理するための道を切り開くための機能を持っています。

1
ZaMoose

"Advance Access Manager"と呼ばれるプラグインをインストールすることによってこれを達成することができる方法をより簡単で効率的な方法で、あなたは機能を書く必要はありませんあなたが望むもののほとんどはこのプラグインによって達成することができます。

0
sillyghost