【カスタマイズ】投稿編集画面にログインしているユーザーが編集可能なポストのみを表示する。

2009年08月01日


WordPressで複数ユーザーで記事の投稿をする場合


投稿したポストを誰が編集できるのかなどの権限を決める必要がある。


デフォルトで管理者、編集者、作成者、寄稿者、購読者のユーザーがあり、それぞれ権限が設定されている。

この、権限を詳細に設定するには「Role Manager」や「Role Scoper」などのプラグインがあるので、これらのプラグインを使えばよい。


複数のユーザーが、同じ企業である場合は他のユーザー投稿したポストが見えても、さほど問題はないかと思うが、各ユーザーが同じ団体に属していない場合など、他ユーザーの投稿したポストは編集画面では見えないほうがいい。


仮に、同じ団体のユーザーであっても、自分が編集できるポストのみ表示されるほうが、投稿編集画面は使い勝手がいいはずだ。

現在ログインしているユーザーが編集可能なポストのみを投稿編集画面の一覧に表示できるようにできないだろうかと試してみた。


プラグインの使用



まず、「Role Scoper」というプラグインを使用するようにすると、編集可能なポスト、カテゴリ、ページのみが表示されるようになる。

しかし、この「Role Scoper」というプラグインは、英語での表記のみであり、多機能すぎる。

新規投稿画面や編集画面に新しい項目が表示され、それも英語である為、ユーザーにとって難解になり使い勝手が悪くなるのではと懸念される。

「Role Manager」は、権限を設定するだけなので、使い方はシンプルだが、このプラグインを導入しても、編集可能なポストのみが表示されるようにはならない。

ちなみに「adminimize」というプラグインも使ってみたが、ユーザーグループ毎に、管理画面に表示する内容を設定できるが、編集可能なポストのみを表示する設定は、いろいろ試してみたが見つからなかったので、おそらくないと思う。


phpファイルをカスタマイズ


WordPressのPHPファイルに手を加えることはしたくないのだが、自分はまだプラグインを作りきらないので、直にPHPファイルに手を加えることにした。


投稿編集画面のファイルは、wp-adminディレクトリ内のedit.phpである。



edit.phpを見ると、263行目あたりに


<?php include( 'edit-post-rows.php' ); ?>とある。

ここが、ポスト一覧が表示されている部分である。


edit-post-row.phpを開いてみる。

<?php post_rows(); ?>とある。post_rows()という関数を探すと、includeディレクトリ内のtemplate.phpに定義されいる。


post_rows関数の中で、_post_row関数が呼びだされている。


_post_row関数は、1367行から始まる。


_post_row関数の中で、current_user_canという関数が使われて、この関数のreturnによって条件分岐がされている。


デフォルトでは、この条件分岐によって、編集のチェックボックスや「削除」「編集」などのリンクが表示されるようになっている。


なので、この条件分岐を1385行目のforeach直後から、1554行目あたりのforeachの閉じカッコまで、くくるように変更した。


これで、現在ログインしているユーザーに編集可能なポストのみが投稿編集画面の一覧に表示されるようになった。



ブログランキング・にほんブログ村へ