From 581deff37198301502d371aeb96b30bcfe7748f1 Mon Sep 17 00:00:00 2001 From: Sergey Biryukov Date: Mon, 27 Jul 2020 02:16:46 +0000 Subject: [PATCH] Posts, Post Types: Pass the post type to `get_lastpostdate()` in `get_lastpostmodified()`. This ensures that the correct values are being compared when retrieving the result for custom post types. Additionally, pass the `$post_type` parameter to `get_lastpostdate` and `get_lastpostmodified` filters. Props mikaumoto, munyagu, donmhico, johnbillion, SergeyBiryukov. Fixes #47777. git-svn-id: https://develop.svn.wordpress.org/trunk@48631 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/post.php | 19 ++++-- tests/phpunit/tests/post/getLastPostDate.php | 39 +++++++++++ .../tests/post/getLastPostModified.php | 67 +++++++++++++++++++ 3 files changed, 119 insertions(+), 6 deletions(-) create mode 100644 tests/phpunit/tests/post/getLastPostDate.php create mode 100644 tests/phpunit/tests/post/getLastPostModified.php diff --git a/src/wp-includes/post.php b/src/wp-includes/post.php index 50b0aa3b76..9c6fac8755 100644 --- a/src/wp-includes/post.php +++ b/src/wp-includes/post.php @@ -6620,16 +6620,20 @@ function get_posts_by_author_sql( $post_type, $full = true, $post_author = null, * @return string The date of the last post, or false on failure. */ function get_lastpostdate( $timezone = 'server', $post_type = 'any' ) { + $date = _get_last_post_time( $timezone, 'date', $post_type ); + /** * Filters the most recent time that a post on the site was published. * * @since 2.3.0 + * @since 5.5.0 Added the `$post_type` parameter. * - * @param string|false $date Date the last post was published. False on failure. - * @param string $timezone Location to use for getting the post published date. - * See get_lastpostdate() for accepted `$timezone` values. + * @param string|false $date Date the last post was published. False on failure. + * @param string $timezone Location to use for getting the post published date. + * See get_lastpostdate() for accepted `$timezone` values. + * @param string $post_type The post type to check. */ - return apply_filters( 'get_lastpostdate', _get_last_post_time( $timezone, 'date', $post_type ), $timezone ); + return apply_filters( 'get_lastpostdate', $date, $timezone, $post_type ); } /** @@ -6661,13 +6665,14 @@ function get_lastpostmodified( $timezone = 'server', $post_type = 'any' ) { * @param string $post_type The post type to check. */ $lastpostmodified = apply_filters( 'pre_get_lastpostmodified', false, $timezone, $post_type ); + if ( false !== $lastpostmodified ) { return $lastpostmodified; } $lastpostmodified = _get_last_post_time( $timezone, 'modified', $post_type ); + $lastpostdate = get_lastpostdate( $timezone, $post_type ); - $lastpostdate = get_lastpostdate( $timezone ); if ( $lastpostdate > $lastpostmodified ) { $lastpostmodified = $lastpostdate; } @@ -6676,13 +6681,15 @@ function get_lastpostmodified( $timezone = 'server', $post_type = 'any' ) { * Filters the most recent time that a post was modified. * * @since 2.3.0 + * @since 5.5.0 Added the `$post_type` parameter. * * @param string|false $lastpostmodified The most recent time that a post was modified, in 'Y-m-d H:i:s' format. * False on failure. * @param string $timezone Location to use for getting the post modified date. * See get_lastpostdate() for accepted `$timezone` values. + * @param string $post_type The post type to check. */ - return apply_filters( 'get_lastpostmodified', $lastpostmodified, $timezone ); + return apply_filters( 'get_lastpostmodified', $lastpostmodified, $timezone, $post_type ); } /** diff --git a/tests/phpunit/tests/post/getLastPostDate.php b/tests/phpunit/tests/post/getLastPostDate.php new file mode 100644 index 0000000000..022228638d --- /dev/null +++ b/tests/phpunit/tests/post/getLastPostDate.php @@ -0,0 +1,39 @@ + true ) ); + + // Create a simple post. + $simple_post_id = self::factory()->post->create( + array( + 'post_title' => 'Simple Post', + 'post_type' => 'post', + 'post_date' => $post_post_date, + ) + ); + + // Create custom type post. + $book_cpt_id = self::factory()->post->create( + array( + 'post_title' => 'Book CPT', + 'post_type' => 'book', + 'post_date' => $book_post_date, + ) + ); + + $this->assertEquals( $post_post_date, get_lastpostdate( 'blog', 'post' ) ); + $this->assertEquals( $book_post_date, get_lastpostdate( 'blog', 'book' ) ); + } +} diff --git a/tests/phpunit/tests/post/getLastPostModified.php b/tests/phpunit/tests/post/getLastPostModified.php new file mode 100644 index 0000000000..1c83ff042a --- /dev/null +++ b/tests/phpunit/tests/post/getLastPostModified.php @@ -0,0 +1,67 @@ + true ) ); + + // Create a simple post. + $simple_post_id = self::factory()->post->create( + array( + 'post_title' => 'Simple Post', + 'post_type' => 'post', + 'post_date' => $post_post_date, + ) + ); + + // Create custom type post. + $book_cpt_id = self::factory()->post->create( + array( + 'post_title' => 'Book CPT', + 'post_type' => 'book', + 'post_date' => $book_post_date, + ) + ); + + // Update `post_modified` and `post_modified_gmt`. + $wpdb->update( + $wpdb->posts, + array( + 'post_modified' => $post_post_modified, + 'post_modified_gmt' => $post_post_modified, + ), + array( + 'ID' => $simple_post_id, + ) + ); + + $wpdb->update( + $wpdb->posts, + array( + 'post_modified' => $book_post_modified, + 'post_modified_gmt' => $book_post_modified, + ), + array( + 'ID' => $book_cpt_id, + ) + ); + + $this->assertEquals( $post_post_modified, get_lastpostmodified( 'blog', 'post' ) ); + $this->assertEquals( $book_post_modified, get_lastpostmodified( 'blog', 'book' ) ); + } +}