WordPress.org

Make WordPress Core

Ticket #10122: 10122.diff

File 10122.diff, 1.8 KB (added by prettyboymp, 8 years ago)

Clear hiearchical terms fix

  • wp-includes/post.php

     
    22962296        // Escape data pulled from DB.
    22972297        $post = add_magic_quotes($post);
    22982298
    2299         // Passed post category list overwrites existing category list if not empty.
    2300         if ( isset($postarr['post_category']) && is_array($postarr['post_category'])
    2301                          && 0 != count($postarr['post_category']) )
     2299        // Passed post category list overwrites existing category list if is set array.
     2300        if ( isset($postarr['post_category']) && is_array($postarr['post_category']) )
    23022301                $post_cats = $postarr['post_category'];
    23032302        else
    23042303                $post_cats = $post['post_category'];
  • wp-admin/includes/post.php

     
    174174                                break;
    175175                }
    176176        }
     177       
     178        //taxonomy stuff
     179        $taxonomies = get_object_taxonomies( $post_data );
     180        foreach ( $taxonomies as $taxonomy_name ) {
     181                $taxonomy_obj = get_taxonomy( $taxonomy_name );
     182                if ( current_user_can( $taxonomy_obj->assign_cap ) ) {
     183                        if ( $taxonomy_obj->hierarchical && $taxonomy_obj->show_ui ) {
     184                                if ( $taxonomy_name == 'category' ) {
     185                                        if ( !isset( $post_data['post_category'] ) )
     186                                                $post_data['post_category'] = array();  //no terms selected, set an empty set
     187                                }
     188                                elseif ( !isset( $post_data['tax_input'][$taxonomy_name] ))
     189                                        $post_data['tax_input'][$taxonomy_name] = array(); //no terms selected, set an empty set
     190                        }
     191                }
     192                elseif ( isset( $post_data['tax_input'][$taxonomy_name] ) )
     193                        unset( $post_data['tax_input'][$taxonomy_name] ); //user can't assign to this taxonomy, clear it
     194        }
    177195
    178196        // Meta Stuff
    179197        if ( isset($post_data['meta']) && $post_data['meta'] ) {