Posts, Post Types: Multisite: Decrement post_count option value when a post is deleted.

Previously, the `post_count` option value was not decremented when a post was deleted.

This change moves the `_update_posts_count_on_delete` action from `delete_post` hook to `after_delete_post` to ensure the deletion is taken into account.

Props henry.wright, pbearne, audrasjb.
Fixes #53443.


git-svn-id: https://develop.svn.wordpress.org/trunk@52207 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
Jb Audras 2021-11-18 15:10:18 +00:00
parent 47d8c7313e
commit c25c175b47
2 changed files with 57 additions and 1 deletions

View File

@ -76,7 +76,7 @@ add_filter( 'allowed_redirect_hosts', 'redirect_this_site' );
// Administration.
add_filter( 'term_id_filter', 'global_terms', 10, 2 );
add_action( 'delete_post', '_update_posts_count_on_delete' );
add_action( 'after_delete_post', '_update_posts_count_on_delete' );
add_action( 'delete_post', '_update_blog_date_on_post_delete' );
add_action( 'transition_post_status', '_update_blog_date_on_post_publish', 10, 3 );
add_action( 'transition_post_status', '_update_posts_count_on_transition_post_status', 10, 3 );

View File

@ -0,0 +1,56 @@
<?php
if ( is_multisite() ) :
/**
* Test update_posts_count() get called via filters of WP_Site in multisite.
*
* @group ms-site
* @group multisite
*
* @covers ::_update_posts_count_on_delete
*/
class Tests_update_posts_count_on_delete extends WP_UnitTestCase {
/**
* Test that the posts count is updated correctly when a posts are added and deleted.
* @ticket 53443
*/
public function test_update_posts_count_on_delete() {
$blog_id = self::factory()->blog->create();
switch_to_blog( $blog_id );
$current_post_count = (int) get_option( 'post_count' );
$post_id = self::factory()->post->create(
array(
'post_type' => 'post',
'post_author' => '1',
'post_date' => '2012-10-23 19:34:42',
'post_status' => 'publish',
)
);
/**
* Check that add_action( 'deleted_post', '_update_posts_count_on_delete' ) is called when a post is created.
* Check that _update_posts_count_on_transition_post_status() is called on that filter which then calls
* update_posts_count to update the count.
*/
$this->assertEquals( $current_post_count + 1, (int) get_option( 'post_count' ), 'post added' );
wp_delete_post( $post_id );
/**
* Check that add_action( 'transition_post_status', '_update_posts_count_on_transition_post_status', 10, 3 )
* is called when a post is deleted.
* Check that _update_posts_count_on_delete() is called on that filter which then calls update_posts_count
* to update the count.
*/
$this->assertEquals( $current_post_count, (int) get_option( 'post_count' ), 'post deleted' );
restore_current_blog();
}
}
endif;