メンバーがカスタム投稿タイプのみにアクセスできるようにします。自分の投稿のみを編集する権限


29

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

私はPHPに非常に満足しており、WordPressのカスタムメタフィールドを使用してカスタム投稿タイプを作成しています。

私がやろうとしていることは次のとおりです。

  1. ユーザーが登録し、デフォルトでサブスクライバーに設定されます。
  2. ユーザーが管理者からカスタム投稿タイプへのアクセス許可をリクエストします。
  3. 管理者は、「ショップ所有者」などの別の権限名にユーザーを割り当てます。
  4. ユーザーはカスタムの投稿タイプを表示できるようになり、この投稿タイプにエントリを作成できるようになりました。
  5. ユーザーは自分の投稿のみを表示および編集できます。

私は次の支援が必要です:

  1. 「ショップ所有者」という新しい「ロール」を作成する方法、
  2. カスタム投稿タイプのみを表示し、アクセスできるように、そのロールに正しい許可を与える方法。
  3. このカスタム投稿タイプへの自分の投稿の表示と編集のみをユーザーに許可します。

理想的には、これがすべてwp-adminから行われることを望みますが、私はこれを実現するためにフロントエンドを構築する必要があるかもしれないと推測しています。

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

敬具

回答:


21

Justin Tadlockのプラグイン「メンバー」を使用します。これにより、新しい役割を作成したり、既存の役割を編集したり、カスタム機能を追加したりできます。あなたがしなければならないすべての作業は、数回クリックするだけで削除できます。

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

あなたが本当に車輪を再発明したいなら、あなた自身の時間の何百時間も無駄にする可能性がありますが、あなたを止めることはできませんが、少なくともあなたは自分自身を救い、あなたが望むことをする方法を学ぶためにTadlockのプラグインを使用することができます。

目的のプラグインを作成したら、「ポスト」、「ページ」、またはその他の「予約済み」以外の内容を示すように、投稿タイプ登録関数のフラグと'map_meta_cap'フラグを変更する必要がありますタイプ。その後、ポスト(例えばに関連するすべての機能を複製、、投稿するのではなく、あなたの能力のタイプを使用して、など)。これらの権限をすべて管理者に割り当てて(これを行うまで投稿タイプを表示できません)、ロールを作成して、投稿タイプに対する「投稿者」ロールの機能を模倣します。true'capability_type'edit_postsedit_others_postspublish_posts

あなたの能力のタイプだったと言うたとえば、foobarsあなたは「店の所有者の与えたいと思うだろうedit_foobarsdelete_foobarsread能力を。そうすれば、彼らは独自のドラフトfoobarを作成し、それらのドラフトを削除できますが、それらにはpublish_foobars機能がないため、承認のために提出する必要があります。にはないのでedit_published_foobars、承認されたfoobarへのすべての変更は承認される必要があります。


メンバープラグインを使用して、メンバーのアクセス許可がどのように機能するかを把握してください。カスタム投稿タイプを設定'map_meta_cap' => true'capability_type' => 'shopowner'ました。という新しいロールを作成し、ShopOwnerread、edit_shopowner、delete_shopownerの機能を付与しました。ユーザーをShopOwnerのロールに設定し、そのユーザーでログインします。そのユーザーはカスタム投稿タイプを見ることができません。私は何かを見逃しましたか?
ブレイディ

2
それらをedit_shopownersとに変更しdelete_shopownersます。edit_shopownerそして、delete_shopowner実際にチェックされることのないメタ機能です。誰かが特定のアイテムを編集または削除しようとするとチェックされ、最終的に「このユーザーはこれらのタイプのアイテムを削除できますか。自分自身または他のユーザーのみを削除できますか?公開されたアイテムを削除できますか?」など
ジョンPブロッホ

私はそれを理解できませんでした...しかし、カスタム投稿タイプで機能を設定し、メンバープラグインでそれらの機能を作成することで、私が望んでいた機能を手に入れました。あなたの投稿が私にとって解決策をまとめるのに最も有用だったので、私はあなたに答えを与えました。ありがとう
ブレイディ

19

登録投稿タイプには「機能」と呼ばれるパラメータがあるため、たとえば

'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' );

うーん... 2行と3行の違いは少し混乱していますか?:S「ショップ所有者」ロールに同じ機能を追加しませんか?
dashaluna

はい、彼らは同じですが、それを行うためのdiffの方法を示します。最初のものは最初のパラメータとしての役割(ショップ所有者)を含み、2番目のものは$ roleを使用しているためキャップのみです。
ワイク

3
機能/許可を翻訳することになっていますか?それは__( '');
スヴェトスラフマリノフ

@SvetoslavMarinov答えを編集して翻訳を削除しました。
マイクシンケル

@dashaluna私はそれを明確にするために答えを編集しました。
MikeSchinkel

1

実際のコンテンツ送信を処理するために、Gravity FormsまたはTDO Mini Formsを検討することを検討しましたか?これらはそれぞれ、ユーザーが送信したコンテンツを正常に処理するための道順をたどる機能を備えています。


返信いただきありがとうございますが、これらは私が探しているものではありません。主にこれらはプラグインだからです。私はすべてを完全に制御できるように、自分で機能を書きたいと思っています。
ブレイディ

0

「Advance Access Manager」と呼ばれるプラグインをインストールすることでこれを実現する簡単で効率的な方法は、機能を記述する必要はありませんが、ユーザー、役割、彼らができることを適切なレベルで制御します。必要なもののほとんどは、このプラグインで実現できます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.