Introduce meta_box_sanitize_cb taxonomy argument.

The `meta_box_cb` argument was introduced in [25572] to allow plugin
authors to provide a custom callback for rendering their taxonomy's meta
box on the post edit screen. However, the routine used to handle the saving
of these custom taxonomy meta boxes was not customizable, but was instead
based simply on whether the taxonomy was hierarchicaly. See [13535].

The new `meta_box_sanitize_cb` argument defaults to the "tag" routine for
non-hierarchical taxonomies and the "category" routine for hierarchical ones,
thereby maintaining the current default behavior. Developers can override this
when the data passed from their `meta_box_cb` differs.

Props boonebgorges, ZaneMatthew, stephenharris.
Fixes #36514.

git-svn-id: https://develop.svn.wordpress.org/trunk@42211 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
Boone Gorges
2017-11-21 03:14:52 +00:00
parent 887214f7ce
commit 4ec5d65dcc
4 changed files with 128 additions and 39 deletions

View File

@@ -791,4 +791,42 @@ class Tests_Taxonomy extends WP_UnitTestCase {
$this->assertSame( 'foo', $taxonomy->name );
}
/**
* @ticket 36514
*/
public function test_edit_post_hierarchical_taxonomy() {
$taxonomy_name = 'foo';
$term_name = 'bar';
register_taxonomy( $taxonomy_name, array( 'post' ), array(
'hierarchical' => false,
'meta_box_cb' => 'post_categories_meta_box',
) );
$post = self::factory()->post->create_and_get( array(
'post_type' => 'post',
) );
$term_id = self::factory()->term->create_object( array(
'name' => $term_name,
'taxonomy' => $taxonomy_name,
) );
wp_set_current_user( self::factory()->user->create( array( 'role' => 'editor' ) ) );
$updated_post_id = edit_post( array(
'post_ID' => $post->ID,
'post_type' => 'post',
'tax_input' => array(
$taxonomy_name => array(
(string) $term_id // Cast term_id as string to match whats sent in WP Admin.
),
),
) );
$terms_obj = get_the_terms( $updated_post_id, $taxonomy_name );
$problematic_term = current( wp_list_pluck( $terms_obj, 'name' ) );
$this->assertEquals( $problematic_term, $term_name );
}
}