Make WordPress Core

Changeset 28835


Ignore:
Timestamp:
06/26/2014 12:52:25 AM (12 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.