投稿一覧からログイン中の投稿者以外の投稿を隠すとカスタムフィールドが表示されないことの対策
カテゴリー: WordPress
この記事は2020年4月2日に書かれたものです。情報が古い可能性がありますのでご注意ください。
投稿者権限のユーザーがログインしている時、投稿一覧を表示すると自身の投稿以外の投稿も見えます。編集はもちろんできず、タイトルが表示されているだけですが、下書きの投稿も見えてしまうので見えないようしたいと思い、次のようなコードを functions.php に書きました。
function show_only_authorpost($query) {
global $current_user;
if( is_admin() && !current_user_can('edit_others_posts') ){
$query->set('author', $current_user->ID);
}
}
add_action('pre_get_posts', 'show_only_authorpost');
これで投稿者は自身の投稿しか表示されなくなりますが、しかし、投稿画面を見ると Advanced Custom Fields (ACF) プラグインで作成したカスタムフィールドが消えていました。
散々悩んだ末、ACF で作成するカスタムフィールドも acf-field-group という一つの投稿タイプであり、管理者が作成しているので、自身の投稿ではないからこれも見えなくなっているのだと気づきました。
そこで、管理画面用のグローバル変数 $pagenow を使い、表示しているページのファイル名(投稿一覧画面は edit.php)による判別を追記しました。
function show_only_authorpost($query) {
global $current_user;
global $pagenow;
if( is_admin() && !current_user_can('edit_others_posts') && $pagenow === 'edit.php' ){
$query->set('author', $current_user->ID);
}
}
add_action('pre_get_posts', 'show_only_authorpost');
これで ACF のカスタムフィールドが表示されます。