From 3544e20e9a0326a923fe5a9d3d326cc460de163b Mon Sep 17 00:00:00 2001 From: Boone Gorges Date: Thu, 13 Nov 2014 02:18:30 +0000 Subject: [PATCH] Introduce `$post_type` param for `count_user_posts()`. Props Caspie, engelen, DrewAPicture. Fixes #21364. git-svn-id: https://develop.svn.wordpress.org/trunk@30322 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/user.php | 18 +++-- tests/phpunit/tests/user/countUserPosts.php | 80 +++++++++++++++++++++ 2 files changed, 91 insertions(+), 7 deletions(-) create mode 100644 tests/phpunit/tests/user/countUserPosts.php diff --git a/src/wp-includes/user.php b/src/wp-includes/user.php index 64836ac7eb..6bd92adefc 100644 --- a/src/wp-includes/user.php +++ b/src/wp-includes/user.php @@ -250,16 +250,18 @@ function wp_validate_logged_in_cookie( $user_id ) { * Number of posts user has written. * * @since 3.0.0 + * @since 4.0.0 Added $post_type parameter. * * @global wpdb $wpdb WordPress database object for queries. * - * @param int $userid User ID. - * @return int Amount of posts user has written. + * @param int $userid User ID. + * @param string $post_type Optional. Post type to count the number of posts for. Default 'post'. + * @return int Number of posts the user has written in this post type. */ -function count_user_posts($userid) { +function count_user_posts( $userid, $post_type = 'post' ) { global $wpdb; - $where = get_posts_by_author_sql('post', true, $userid); + $where = get_posts_by_author_sql( $post_type, true, $userid ); $count = $wpdb->get_var( "SELECT COUNT(*) FROM $wpdb->posts $where" ); @@ -267,11 +269,13 @@ function count_user_posts($userid) { * Filter the number of posts a user has written. * * @since 2.7.0 + * @since 4.0.0 Added $post_type parameter. * - * @param int $count The user's post count. - * @param int $userid User ID. + * @param int $count The user's post count. + * @param int $userid User ID. + * @param string $post_type Post type to count the number of posts for. */ - return apply_filters( 'get_usernumposts', $count, $userid ); + return apply_filters( 'get_usernumposts', $count, $userid, $post_type ); } /** diff --git a/tests/phpunit/tests/user/countUserPosts.php b/tests/phpunit/tests/user/countUserPosts.php new file mode 100644 index 0000000000..2d232e815c --- /dev/null +++ b/tests/phpunit/tests/user/countUserPosts.php @@ -0,0 +1,80 @@ +user->create( array( + 'role' => 'author', + 'user_login' => 'count_user_posts_user', + ) ); + + self::$post_ids = $factory->post->create_many( 4, array( + 'post_author' => self::$user_id, + 'post_type' => 'post', + ) ); + self::$post_ids = array_merge( self::$post_ids, $factory->post->create_many( 3, array( + 'post_author' => self::$user_id, + 'post_type' => 'wptests_pt', + ) ) ); + self::$post_ids = array_merge( self::$post_ids, $factory->post->create_many( 2, array( + 'post_author' => 12345, + 'post_type' => 'wptests_pt', + ) ) ); + self::$post_ids = array_merge( self::$post_ids, $factory->post->create_many( 1, array( + 'post_author' => 12345, + 'post_type' => 'wptests_pt', + ) ) ); + + self::commit_transaction(); + } + + public static function tearDownAfterClass() { + if ( is_multisite() ) { + wpmu_delete_user( self::$user_id ); + } else { + wp_delete_user( self::$user_id ); + } + + foreach ( self::$post_ids as $post_id ) { + wp_delete_post( $post_id, true ); + } + + self::commit_transaction(); + } + + public function setUp() { + parent::setUp(); + register_post_type( 'wptests_pt' ); + } + + public function tearDown() { + parent::tearDown(); + _unregister_post_type( 'wptests_pt' ); + } + + public function test_count_user_posts_post_type_should_default_to_post() { + $this->assertEquals( 4, count_user_posts( self::$user_id ) ); + } + + /** + * @ticket 21364 + */ + public function test_count_user_posts_post_type_post() { + $this->assertEquals( 4, count_user_posts( self::$user_id, 'post' ) ); + } + + /** + * @ticket 21364 + */ + public function test_count_user_posts_post_type_cpt() { + $this->assertEquals( 3, count_user_posts( self::$user_id, 'wptests_pt' ) ); + } +}