mirror of
https://github.com/gosticks/wordpress-develop.git
synced 2026-06-28 22:30:04 +00:00
Posts, Post Types: Fail gracefully when checking whether a single post with an unregistered post status should be displayed in WP_Query::get_posts().
If the post status is not registered, assume it's not public, but still allow access to users with edit permissions (same as for a protected post status, e.g. `draft`), so that they could recover orphaned content. Add unit tests. Follow-up to [47178]. Props roytanck, SergeyBiryukov. Fixes #48653. git-svn-id: https://develop.svn.wordpress.org/trunk@47181 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
@@ -262,6 +262,27 @@ class Tests_Query_PostStatus extends WP_UnitTestCase {
|
||||
$this->assertEmpty( $q->posts );
|
||||
}
|
||||
|
||||
public function test_single_post_with_nonpublic_status_should_not_be_shown_for_any_user() {
|
||||
register_post_type( 'foo_pt' );
|
||||
register_post_status( 'foo_ps', array( 'public' => false ) );
|
||||
$p = self::factory()->post->create(
|
||||
array(
|
||||
'post_status' => 'foo_ps',
|
||||
'post_author' => self::$author_user_id,
|
||||
)
|
||||
);
|
||||
|
||||
wp_set_current_user( self::$editor_user_id );
|
||||
|
||||
$q = new WP_Query(
|
||||
array(
|
||||
'p' => $p,
|
||||
)
|
||||
);
|
||||
|
||||
$this->assertEmpty( $q->posts );
|
||||
}
|
||||
|
||||
public function test_single_post_with_nonpublic_and_protected_status_should_not_be_shown_for_user_who_cannot_edit_others_posts() {
|
||||
register_post_type( 'foo_pt' );
|
||||
register_post_status(
|
||||
@@ -370,15 +391,44 @@ class Tests_Query_PostStatus extends WP_UnitTestCase {
|
||||
$this->assertEquals( array( $p ), wp_list_pluck( $q->posts, 'ID' ) );
|
||||
}
|
||||
|
||||
public function test_single_post_with_nonpublic_and_protected_status_should_not_be_shown_for_any_user() {
|
||||
/**
|
||||
* @ticket 48653
|
||||
*/
|
||||
public function test_single_post_with_nonexisting_status_should_not_be_shown_for_user_who_cannot_edit_others_posts() {
|
||||
register_post_type( 'foo_pt' );
|
||||
register_post_status( 'foo_ps', array( 'public' => false ) );
|
||||
register_post_status( 'foo_ps', array( 'public' => true ) );
|
||||
$p = self::factory()->post->create(
|
||||
array(
|
||||
'post_status' => 'foo_ps',
|
||||
'post_author' => self::$editor_user_id,
|
||||
)
|
||||
);
|
||||
_unregister_post_status( 'foo_ps' );
|
||||
|
||||
wp_set_current_user( self::$author_user_id );
|
||||
|
||||
$q = new WP_Query(
|
||||
array(
|
||||
'p' => $p,
|
||||
)
|
||||
);
|
||||
|
||||
$this->assertEmpty( $q->posts );
|
||||
}
|
||||
|
||||
/**
|
||||
* @ticket 48653
|
||||
*/
|
||||
public function test_single_post_with_nonexisting_status_should_be_shown_for_user_who_can_edit_others_posts() {
|
||||
register_post_type( 'foo_pt' );
|
||||
register_post_status( 'foo_ps', array( 'public' => true ) );
|
||||
$p = self::factory()->post->create(
|
||||
array(
|
||||
'post_status' => 'foo_ps',
|
||||
'post_author' => self::$author_user_id,
|
||||
)
|
||||
);
|
||||
_unregister_post_status( 'foo_ps' );
|
||||
|
||||
wp_set_current_user( self::$editor_user_id );
|
||||
|
||||
@@ -388,7 +438,7 @@ class Tests_Query_PostStatus extends WP_UnitTestCase {
|
||||
)
|
||||
);
|
||||
|
||||
$this->assertEmpty( $q->posts );
|
||||
$this->assertEquals( array( $p ), wp_list_pluck( $q->posts, 'ID' ) );
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user