WordPress管理画面の投稿一覧のナビゲーションを、各ユーザーの情報のみ表示させる方法

WordPressのユーザー機能を利用して各ユーザーがそれぞれ投稿ができるサイトを作るとき、投稿一覧画面の上のところのナビゲーション(画像参照)に全てのユーザーの投稿件数などが表示されてしまう問題。

管理者以外の投稿者などで新しい会員を登録できるような機構にして、投稿画面などではそのアカウントで投稿などを行った情報だけでうまいこと運用したい時、投稿の情報に関しては、アクションフックで制御できるけど、その上のナビゲーションだけは全ユーザーのデータが表示されてしまいます。

公式で正式は方法はまだ無いらしくトリッキーな方法ですが、function.phpに下記コードを追加すると制御できるみたいです。

(コードの改変は自己責任でお願いします)


add_filter('wp_count_posts', 'wpse149143_wp_count_posts', 10, 3);
function wpse149143_wp_count_posts( $counts, $type, $perm ) {
global $wpdb;

// We only want to modify the counts shown in admin and depending on $perm being 'readable'
if ( ! is_admin() || 'readable' !== $perm ) {
return $counts;
}

// Only modify the counts if the user is not allowed to edit the posts of others
$post_type_object = get_post_type_object($type);
if (current_user_can( $post_type_object->cap->edit_others_posts ) ) {
return $counts;
}

$query = "SELECT post_status, COUNT( * ) AS num_posts FROM {$wpdb->posts} WHERE post_type = %s AND (post_author = %d) GROUP BY post_status";
$results = (array) $wpdb->get_results( $wpdb->prepare( $query, $type, get_current_user_id() ), ARRAY_A );
$counts = array_fill_keys( get_post_stati(), 0 );

foreach ( $results as $row ) {
$counts[ $row['post_status'] ] = $row['num_posts'];
}

return (object) $counts;
}
<p class="p3">

コメントを残す

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください