diff --git a/src/wp-admin/includes/post.php b/src/wp-admin/includes/post.php index 13d9d44bd8..1e6d9fa3bc 100644 --- a/src/wp-admin/includes/post.php +++ b/src/wp-admin/includes/post.php @@ -337,6 +337,11 @@ function edit_post( $post_data = null ) { $clean_terms = array(); foreach ( $terms as $term ) { + // Empty terms are invalid input. + if ( empty( $term ) ) { + continue; + } + $_term = get_terms( $taxonomy, array( 'name' => $term, 'fields' => 'ids', diff --git a/tests/phpunit/tests/admin/includesPost.php b/tests/phpunit/tests/admin/includesPost.php index 647ff61ecd..0388a82a09 100644 --- a/tests/phpunit/tests/admin/includesPost.php +++ b/tests/phpunit/tests/admin/includesPost.php @@ -175,6 +175,36 @@ class Tests_Admin_includesPost extends WP_UnitTestCase { $this->assertContains( 'baz', wp_list_pluck( $found, 'name' ) ); } + /** + * @ticket 30615 + */ + public function test_edit_post_should_not_create_terms_for_an_empty_tag_input_field() { + $u = $this->factory->user->create( array( 'role' => 'editor' ) ); + wp_set_current_user( $u ); + + register_taxonomy( 'wptests_tax', array( 'post' ) ); + $t1 = $this->factory->term->create( array( + 'taxonomy' => 'wptests_tax', + 'name' => 'foo', + 'slug' => 'bar', + ) ); + + $p = $this->factory->post->create(); + + $post_data = array( + 'post_ID' => $p, + 'tax_input' => array( + 'wptests_tax' => ' ', + ), + ); + + edit_post( $post_data ); + + $found = wp_get_post_terms( $p, 'wptests_tax' ); + + $this->assertEmpty( $found ); + } + /** * @ticket 27792 */