1 | From 8e94268c1ea99aaf36b59a405ca186e9ed361edd Mon Sep 17 00:00:00 2001 |
---|
2 | From: Phil Banks <phil@helpfultechnology.com> |
---|
3 | Date: Fri, 31 Jul 2015 12:34:22 +0100 |
---|
4 | Subject: [PATCH] Show true post count on users screen |
---|
5 | |
---|
6 | Include draft posts in count of users' posts on users.php |
---|
7 | --- |
---|
8 | wp-admin/includes/class-wp-users-list-table.php | 2 +- |
---|
9 | wp-includes/post.php | 6 +++++- |
---|
10 | wp-includes/user.php | 12 +++++++----- |
---|
11 | 3 files changed, 13 insertions(+), 7 deletions(-) |
---|
12 | |
---|
13 | diff --git a/wp-admin/includes/class-wp-users-list-table.php b/wp-admin/includes/class-wp-users-list-table.php |
---|
14 | index 4035c58..472c97d 100644 |
---|
15 | --- a/wp-admin/includes/class-wp-users-list-table.php |
---|
16 | +++ b/wp-admin/includes/class-wp-users-list-table.php |
---|
17 | @@ -311,7 +311,7 @@ class WP_Users_List_Table extends WP_List_Table { |
---|
18 | public function display_rows() { |
---|
19 | // Query the post counts for this page |
---|
20 | if ( ! $this->is_site_users ) |
---|
21 | - $post_counts = count_many_users_posts( array_keys( $this->items ) ); |
---|
22 | + $post_counts = count_many_users_posts( array_keys( $this->items ), 'post', false, true ); |
---|
23 | |
---|
24 | $editable_roles = array_keys( get_editable_roles() ); |
---|
25 | |
---|
26 | diff --git a/wp-includes/post.php b/wp-includes/post.php |
---|
27 | index ff332e2..26b16e1 100644 |
---|
28 | --- a/wp-includes/post.php |
---|
29 | +++ b/wp-includes/post.php |
---|
30 | @@ -5415,9 +5415,10 @@ function get_private_posts_cap_sql( $post_type ) { |
---|
31 | * @param int $post_author Optional. Query posts having a single author ID. Default null. |
---|
32 | * @param bool $public_only Optional. Only return public posts. Skips cap checks for |
---|
33 | * $current_user. Default false. |
---|
34 | + * @param bool $drafts Optional. Include draft posts. Default false. |
---|
35 | * @return string SQL WHERE code that can be added to a query. |
---|
36 | */ |
---|
37 | -function get_posts_by_author_sql( $post_type, $full = true, $post_author = null, $public_only = false ) { |
---|
38 | +function get_posts_by_author_sql( $post_type, $full = true, $post_author = null, $public_only = false, $drafts = false ) { |
---|
39 | global $wpdb; |
---|
40 | |
---|
41 | if ( is_array( $post_type ) ) { |
---|
42 | @@ -5448,6 +5449,9 @@ function get_posts_by_author_sql( $post_type, $full = true, $post_author = null, |
---|
43 | |
---|
44 | // Only need to check the cap if $public_only is false. |
---|
45 | $post_status_sql = "post_status = 'publish'"; |
---|
46 | + if( $drafts ) { |
---|
47 | + $post_status_sql .= " OR post_status = 'draft'"; |
---|
48 | + } |
---|
49 | if ( false === $public_only ) { |
---|
50 | if ( $cap ) { |
---|
51 | // Does the user have the capability to view private posts? Guess so. |
---|
52 | diff --git a/wp-includes/user.php b/wp-includes/user.php |
---|
53 | index 54b09ff..572667c 100644 |
---|
54 | --- a/wp-includes/user.php |
---|
55 | +++ b/wp-includes/user.php |
---|
56 | @@ -263,12 +263,13 @@ function wp_validate_logged_in_cookie( $user_id ) { |
---|
57 | * @param int $userid User ID. |
---|
58 | * @param array|string $post_type Optional. Post type(s) to count the number of posts for. Default 'post'. |
---|
59 | * @param bool $public_only Optional. Whether to only return counts for public posts. Default false. |
---|
60 | - * @return int Number of posts the user has written in this post type. |
---|
61 | + * @param bool $drafts Optional. Include draft posts. Default false. |
---|
62 | +* @return int Number of posts the user has written in this post type. |
---|
63 | */ |
---|
64 | -function count_user_posts( $userid, $post_type = 'post', $public_only = false ) { |
---|
65 | +function count_user_posts( $userid, $post_type = 'post', $public_only = false, $drafts = false ) { |
---|
66 | global $wpdb; |
---|
67 | |
---|
68 | - $where = get_posts_by_author_sql( $post_type, true, $userid, $public_only ); |
---|
69 | + $where = get_posts_by_author_sql( $post_type, true, $userid, $public_only, $drafts ); |
---|
70 | |
---|
71 | $count = $wpdb->get_var( "SELECT COUNT(*) FROM $wpdb->posts $where" ); |
---|
72 | |
---|
73 | @@ -297,9 +298,10 @@ function count_user_posts( $userid, $post_type = 'post', $public_only = false ) |
---|
74 | * @param array $users Array of user IDs. |
---|
75 | * @param string|array $post_type Optional. Single post type or array of post types to check. Defaults to 'post'. |
---|
76 | * @param bool $public_only Optional. Only return counts for public posts. Defaults to false. |
---|
77 | + * @param bool $drafts Optional. Include draft posts. Default false. |
---|
78 | * @return array Amount of posts each user has written. |
---|
79 | */ |
---|
80 | -function count_many_users_posts( $users, $post_type = 'post', $public_only = false ) { |
---|
81 | +function count_many_users_posts( $users, $post_type = 'post', $public_only = false, $drafts = false ) { |
---|
82 | global $wpdb; |
---|
83 | |
---|
84 | $count = array(); |
---|
85 | @@ -307,7 +309,7 @@ function count_many_users_posts( $users, $post_type = 'post', $public_only = fal |
---|
86 | return $count; |
---|
87 | |
---|
88 | $userlist = implode( ',', array_map( 'absint', $users ) ); |
---|
89 | - $where = get_posts_by_author_sql( $post_type, true, null, $public_only ); |
---|
90 | + $where = get_posts_by_author_sql( $post_type, true, null, $public_only, $drafts ); |
---|
91 | |
---|
92 | $result = $wpdb->get_results( "SELECT post_author, COUNT(*) FROM $wpdb->posts $where AND post_author IN ($userlist) GROUP BY post_author", ARRAY_N ); |
---|
93 | foreach ( $result as $row ) { |
---|
94 | -- |
---|
95 | 2.2.1 |
---|
96 | |
---|