#知りたいこと
Wordpressに標準搭載されていて、JSからwp.media()を用いると呼び出せるメディアアップローダーから、既存のメディア(post_type = attachment)ではない、カスタム投稿タイプを扱う方法について。
具体的には、
- 既存のattachmentと同様で、post_typeのみ変更したカスタム投稿タイプを作成する
- そのカスタム投稿タイプをメディアアップローダーで開く
- メディアアップローダーからそのカスタム投稿タイプで保存する
の3点を実現しようとしています。
1.に関しては特に苦労せず実装できそうなのですが、2.と3.に関しては全く歯が立ちません。
ソースコードレベルの話でも構いませんので、なにかご教授願えればと思います。
#経緯
現在、Wordpressを利用してサイトを作成しているのですが、その際
- ユーザーを管理者と寄稿者を分ける
- 管理者はすべての投稿タイプを自由に弄れる
- 寄稿者は一部の限定された投稿タイプのみ弄れる
という状態にしたいと考えています。
しかし、メディア関連の権限はupload_filesただひとつなので、寄稿者は「メディアをすべて弄れる」あるいは「メディアを全く弄れない」という2択の状況しか実現できませんでした。
そこで、デフォルトのメディア(post_type='attachment')と同様のカスタム投稿タイプ(例として'attachment_b')を作り、
- 管理者はattachmentもattachment_bも自由に弄れる
- 寄稿者はattachment_bのみ弄れる
という状態にすることで解決しようと考えましたが、結局、メディアアップローダーでattachment以外の投稿タイプを扱う方法が見つからず、躓いてしまいました。
wp.media()の引数を弄ればどうにかなるかと考えていましたが、自力で調べてもどうにもそれらしい情報を見つけることが出来ませんでした。
#補足
質への直接の回答ではなく、
- メディアアップローダーのattachment取得及び保存のソースコードの場所
- はじめの条件を達成するためのそもそも全く別のアプローチ
でも構いませんので、どなたかお力添えいただけれ思います。
ちなみに、wp.media()のソースとしてmedia-model.jsは一通り読みましたが、どうやらデータベースからの情報取得と書き込みはそこでは行っていなさそうでした。
#追記依頼へ
ご意見ありがとうございます。
CHERRY様のおっしゃる方向からのアプローチをもう一度考えてみました。
アクションフックに引っ掛けて、手動でattachmentに関わる権限の名前を書き換えることで、自分の作成したメディアだけを編集できるようにすることが出来ました。
また、その際、他の投稿タイプと違い、編集不能なものも管理画面から見えてしまう問題がありましたが、こちらはpre_get_postsに引っ掛けて作成者をそのユーザーに限定することで対処できました。
しかし、一括削除等の場合を考えると今ひとつ不便さが残りますので、もうしばらく回答を募集させていただきたいと思います。
回答1件
あなたの回答
tips
プレビュー