diff --git a/wp-admin/includes/post.php b/wp-admin/includes/post.php index 80765854fd..a03d998f2f 100644 --- a/wp-admin/includes/post.php +++ b/wp-admin/includes/post.php @@ -311,20 +311,24 @@ function bulk_edit_posts( $post_data = null ) { } $tax_names = get_object_taxonomies( get_post($post_ID) ); - if ( isset($new_cats) && in_array( 'category', $tax_names ) ) { $cats = (array) wp_get_post_categories($post_ID); $post_data['post_category'] = array_unique( array_merge($cats, $new_cats) ); } foreach ( $tax_names as $tax_name ) { - if( isset( $tax_input[$tax_name]) ) { - if ( is_taxonomy_hierarchical( $tax_name ) ) - $terms = (array) wp_get_object_terms( $post_ID, $tax_name, array('fields' => 'ids') ); - else - $terms = (array) wp_get_object_terms( $post_ID, $tax_name, array('fields' => 'names') ); - $post_data['tax_input'][$tax_name] = array_merge( $terms, $tax_input[$tax_name] ); - } + $taxonomy_obj = get_taxonomy($tax_name); + if( isset( $tax_input[$tax_name]) && current_user_can( $taxonomy_obj->assign_cap ) ) + $new_terms = $tax_input[$tax_name]; + else + $new_terms = array(); + + if ( $taxonomy_obj->hierarchical ) + $current_terms = (array) wp_get_object_terms( $post_ID, $tax_name, array('fields' => 'ids') ); + else + $current_terms = (array) wp_get_object_terms( $post_ID, $tax_name, array('fields' => 'names') ); + + $post_data['tax_input'][$tax_name] = array_merge( $current_terms, $new_terms ); } $post_data['ID'] = $post_ID; @@ -1606,4 +1610,4 @@ tinyMCE.init(tinyMCEPreInit.mceInit); /* ]]> */