寄稿者の権限で投稿を受け付ける場合、その人以外の投稿を見せないようにするためには、フィルターフックとアクションフックの両方を利用する必要があります。
フィルターフック
プラグイン API/フィルターフック一覧 – WordPress Codex 日本語版
WordPress上で投稿データを表示するときなど、何か表示するタイミングで独自のプログラムを実行させることができます。
アクションフック
プラグイン API/アクションフック一覧 – WordPress Codex 日本語版
WordPress上で投稿ボタンを押したときなど、何か動作が発生したタイミングで独自のプログラムを実行させることができます。
要件
- 投稿一覧で「すべて」「公開済み」などの投稿状態フィルタを非表示にする
- 寄稿者が自分の投稿数0件の状態でも、投稿一覧で他者の投稿が見えないようにする
上記を満たすために、フィルターフックとアクションフックをテーマ内のfunctions.phpに記述していきます。
実装
投稿一覧で「すべて」「公開済み」などの投稿状態フィルタを非表示にする
function show_owned_posts_only( $views ) {
unset($views['all']); // すべて
unset($views['draft']); // 下書き
unset($views['publish']); // 公開済み
unset($views['pending']); // 保留中
unset($views['trash']); // ゴミ箱
return $views;
}
// views_edit-[post_type] カスタム投稿タイプの場合は、投稿タイプを指定する
add_filter('views_edit-xxxxx', 'show_owned_posts_only');
投稿状態フィルタそれぞれの内容はコールバック引数で受け取る、$viewsに入っています。unset()で要素を削除することで制御できます。
今回はすべての要素を非表示にすることで、「所有」という自分の投稿数のみ表示されるようになります。
注意点としては、CODEXにある「views_edit-post」は「投稿(投稿タイプ=post)一覧」のフィルターフックだという点です。カスタム投稿タイプを利用する場合は、「views_edit-hoge」のように投稿タイプ名に置き換える必要があります。
寄稿者が自分の投稿数0件の状態でも、投稿一覧で他者の投稿が見えないようにする
function hide_other_posts($wp_query) {
global $current_screen, $current_user;
if($current_screen->id != "edit-xxxxx") {
return;
}
if(!$current_user->roles[0] == "contributor") {
return false;
}
$wp_query->query_vars['author'] = $current_user->ID;
}
add_action('pre_get_posts', 'hide_other_posts');
フィルターフックで投稿状態フィルタを非表示したとしても、寄稿者の投稿数が0件の状態で投稿一覧にアクセスすると、他者の投稿が見えてしまいます。
pre_get_postsアクションフックを使い、ある特定の画面(この場合はカスタム投稿タイプの投稿一覧)で、ログインしているユーザー(この場合は寄稿者)の投稿のみ取得しています。
$current_screenと$current_userで現在表示している画面とログインしているユーザーを特定しています。
ユーザーを特定できれば、$wp_queryからauthorパラメータで投稿を絞り込むことができます。
参考
[concrete5.6] ローカルで作成したDesigner Content Proのブロックを本番へ移行する
2016年3月24日
cocrete5の強力なプラグイン、Designer Content Proで作成したブロックをローカルから本番環境へ移行するためのポイントを備忘録としてまとめました。
0 Comments1 Minute
OSX Marvericks にアップデートしたら MAMP PRO が動かなくなった
2013年11月2日
OSX Marverics(以下、Marvericks)になって、便利な機能も増えましたが恒例のごとく「今まで動いていたものが動かない!」というケースも発生したりします。今回は、MAMP PROがそれになったので対処法をメモとして残しておきます。
0 Comments1 Minutes
Guard + Compass + Foundation で環境構築メモ
2013年7月5日
フロントエンド開発でもCUIベースでのビルドツールが充実してきています。RubyベースのGuardで複数のリソースを扱う方法についてメモをまとめました。
0 Comments1 Minutes
RubyでYoutube Data APIの認証、動画検索、取得、更新
2013年2月28日
RubyからGoogle Data APIを操作するバッチを書いていたので、おさらいです。APIとのやりとりを直接書いてみると、マッシュアップ系のWebサービスを作るときの基礎練習として良いですね。
0 Comments2 Minutes
HTTPでXMLを送信したら、The Processing Instruction Target Matching “[xX][mM][lL]” is Not Allowed
2013年2月27日
Rubyで次々とXML送信するバッチスクリプトを書いていたところ、Net::HTTP#putの利用時にステータス400。ふたを開けてみると、なんということはない内容でした。
0 Comments1 Minute
Sublime Text 2 + MAMP + Xdebug でPHPデバッグをする方法
2012年12月18日
Sublime Text 2(以下、ST2)がすっかりメインエディタに定着したのですが、デバッグ環境が未整理でした。そういえば・・・と思って探してみると、やはりプラグインがありました。ST2とMAMPによるPHPデバッグ環境の導入方法を解説します。
0 Comments1 Minutes
IE9でprototype.js + Shadowbox.jsを使う場合のメモ
2012年6月5日
IE9なら、モダンブラウザに近づくから面倒なIE対応は減るはず、というのは幻想で余計に手間が増えるケースもあります。今回は限定されたシチュエーションですが、JavaScriptライブラリを使う場合の対応をまとめました。
0 Comments1 Minute
[FuelPHP] taskでRailsライクなseedを作る
2012年2月22日
FuelPHPを使い始めているのですが、良いと評価できる点にコマンドラインから実行できる便利なタスクがあります。Railsではrake, railsというコマンドで各種タスクを実行でき、それを踏襲しています。今回はその中でも初期データ作成に便利なseedという機能をFuelPHP上に作ってみました。
0 Comments1 Minute