WordPress.org

Make WordPress Core

Changeset 28835


Ignore:
Timestamp:
06/26/2014 12:52:25 AM (5 years ago)
Author:
wonderboymusic
Message:

get_blog_details()->post_count should update on more actions than just publish_post.

Adds unit test.

Props 5um17, midxcat, strangerstudios.
Fixes #27952.

Location:
trunk
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/wp-includes/ms-blogs.php

    r27347 r28835  
    893893}
    894894
     895/**
     896 * Handler for updating the blog posts count date when a post is deleted.
     897 *
     898 * @since 4.0
     899 *
     900 * @param int $post_id Post ID
     901 */
     902function _update_posts_count_on_delete( $post_id ) {
     903    if ( 'publish' !== get_post_field( 'post_status', $post_id ) ) {
     904        return;
     905    }
     906   
     907    update_posts_count();
     908}
     909
     910/**
     911 * Handler for updating the blog posts count date when a post status changes.
     912 *
     913 * @since 4.0
     914 *
     915 * @param string $new_status The status the post is changing to.
     916 * @param string $old_status The status the post is changing from.
     917 */
     918function _update_posts_count_on_transition_post_status( $new_status, $old_status ) {
     919    if ( $new_status === $old_status ) {
     920        return;
     921    }
     922
     923    if ( 'publish' !== $new_status && 'publish' !== $old_status ) {
     924        return;
     925    }
     926
     927    update_posts_count();
     928}
     929
  • trunk/src/wp-includes/ms-default-filters.php

    r25621 r28835  
    3535// Administration
    3636add_filter( 'term_id_filter', 'global_terms', 10, 2 );
    37 add_action( 'publish_post', 'update_posts_count' );
     37add_action( 'delete_post', '_update_posts_count_on_delete' );
    3838add_action( 'delete_post', '_update_blog_date_on_post_delete' );
    3939add_action( 'transition_post_status', '_update_blog_date_on_post_publish', 10, 3 );
     40add_action( 'transition_post_status', '_update_posts_count_on_transition_post_status', 10, 2 );
    4041
    4142// Counts
  • trunk/src/wp-includes/ms-functions.php

    r28551 r28835  
    17621762 * to avoid extraneous COUNTs when a blog's details are fetched
    17631763 * with get_blog_details(). This function is called when posts
    1764  * are published to make sure the count stays current.
     1764 * are published or unpublished to make sure the count stays current.
    17651765 *
    17661766 * @since MU
  • trunk/tests/phpunit/tests/ms.php

    r28280 r28835  
    13861386        }
    13871387    }
     1388
     1389    /**
     1390     * @ticket 27952
     1391     */
     1392    function test_posts_count() {
     1393        $this->factory->post->create();
     1394        $post2 = $this->factory->post->create();
     1395        $this->assertEquals( 2, get_blog_details()->post_count );
     1396
     1397        wp_delete_post( $post2 );
     1398        $this->assertEquals( 1, get_blog_details()->post_count );
     1399    }
    13881400}
    13891401
Note: See TracChangeset for help on using the changeset viewer.