投稿一覧画面で、自分の投稿数のみカウントして表示する
WordPressのSNSプラグイン、BuddyPressを導入すると不特定多数のメンバーが参加することになる。
管理者ではなく、参加するメンバーが記事を投稿した場合、誰でも全員の投稿を見れるようになっているのをカスタマイズして、自分の投稿のみ表示するようにした。
・投稿者の「投稿画面」では、自分の投稿のみ表示させる方法で紹介した。
でも、そのままでは、投稿数が変になるので、そこを修正。
functions.php へ記述
wp_count_postsで、投稿一覧のページで表示される記事数
//自分の投稿のみの投稿数を取得してその数に代入して表示
function count_author_posts( $counts, $type = 'post', $perm = '' ) { if ( !is_admin() || current_user_can('administrator') ) { return $counts; //管理者や管理画面じゃない場合はそのまま出力 } global $wpdb; if ( ! post_type_exists( $type ) ) return new stdClass; $cache_key = _count_posts_cache_key( $type, $perm ) . '_author'; $counts = wp_cache_get( $cache_key, 'counts' ); if ( false !== $counts ) { return $counts; } $query = "SELECT post_status, COUNT( * ) AS num_posts FROM {$wpdb->posts} WHERE post_type = %s"; $query .= $wpdb->prepare( " AND ( post_author = %d )", get_current_user_id() ); $query .= ' GROUP BY post_status'; $results = (array) $wpdb->get_results( $wpdb->prepare( $query, $type ), ARRAY_A ); $counts = array_fill_keys( get_post_stati(), 0 ); foreach ( $results as $row ) { $counts[ $row['post_status'] ] = $row['num_posts']; } $counts = (object) $counts; wp_cache_set( $cache_key, $counts, 'counts' ); return $counts; } add_filter( 'wp_count_posts', 'count_author_posts', 10, 3 );
これで投稿数を、自分の投稿のみをカウントして出力できる。
合わせて変更が必要なカスタマイズ案
こちらも参照。