Make WordPress Core

Changeset 5533


Ignore:
Timestamp:
05/23/2007 10:03:24 PM (19 years ago)
Author:
ryan
Message:

wp_delete_term(). see #4189

Location:
trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/wp-admin/admin-db.php

    r5528 r5533  
    151151
    152152        $cat_ID = (int) $cat_ID;
    153         $default_cat = get_option('default_category');
    154         $default_link_cat = get_option('default_link_category');
    155 
    156         // Don't delete either of the default cats
    157         if ( $cat_ID == $default_cat || $cat_ID == $default_link_cat )
    158                 return 0;
    159 
    160         $category = get_category($cat_ID);
    161 
    162         $parent = $category->category_parent;
    163 
    164         // Delete the category if it is not also a tag.
    165         if ( 0 == ($category->type & TAXONOMY_TAG) ) {
    166                 if ( !$wpdb->query("DELETE FROM $wpdb->categories WHERE cat_ID = '$cat_ID'") )
    167                         return 0;
    168         } else {
    169                 $wpdb->query("UPDATE $wpdb->categories SET type = type & ~" . TAXONOMY_CATEGORY . " WHERE cat_ID = '$cat_ID'");
    170         }
    171         // Update children to point to new parent
    172         $wpdb->query("UPDATE $wpdb->categories SET category_parent = '$parent' WHERE category_parent = '$cat_ID'");
    173 
    174         // Only set posts and links to the default category if they're not in another category already
    175         $posts = $wpdb->get_col("SELECT post_id FROM $wpdb->post2cat WHERE category_id='$cat_ID' AND rel_type = 'category'");
    176         foreach ( (array) $posts as $post_id ) {
    177                 $cats = wp_get_post_categories($post_id);
    178                 if ( 1 == count($cats) )
    179                         $cats = array($default_cat);
    180                 else
    181                         $cats = array_diff($cats, array($cat_ID));
    182                 wp_set_post_categories($post_id, $cats);
    183         }
    184 
    185         $links = $wpdb->get_col("SELECT link_id FROM $wpdb->link2cat WHERE category_id='$cat_ID'");
    186         foreach ( (array) $links as $link_id ) {
    187                 $cats = wp_get_link_cats($link_id);
    188                 if ( 1 == count($cats) )
    189                         $cats = array($default_link_cat);
    190                 else
    191                         $cats = array_diff($cats, array($cat_ID));
    192                 wp_set_link_cats($link_id, $cats);
    193         }
    194 
    195         clean_category_cache($cat_ID);
    196         do_action('delete_category', $cat_ID);
    197         return 1;
     153        $default = get_option('default_category');
     154
     155        // Don't delete the default cat
     156        if ( $cat_ID == $default )
     157                return 0;
     158
     159        return wp_delete_term($cat_ID, 'category', "default=$default");
    198160}
    199161
  • trunk/wp-includes/taxonomy.php

    r5529 r5533  
    1919
    2020        return $wp_taxonomies[$taxonomy];
     21}
     22
     23function is_taxonomy_hierarchical($taxonomy) {
     24        if ( ! is_taxonomy($taxonomy) )
     25                return false;
     26
     27        $taxonomy = get_taxonomy($taxonomy);
     28        return $taxonomy['hierarchical'];
    2129}
    2230
     
    99107 * Removes a term from the database.
    100108 */
    101 function wp_delete_term() {}
     109function wp_delete_term( $term, $taxonomy, $args = array() ) {
     110        global $wpdb;
     111
     112        $term = (int) $term;
     113
     114        if ( ! $ids = is_term($term, $taxonomy) )
     115                return false;
     116        $tt_id = $ids['term_taxonomy_id'];
     117
     118        $defaults = array();
     119        $args = wp_parse_args($args, $defaults);
     120        extract($args);
     121
     122        if ( isset($default) ) {
     123                $default = (int) $default;
     124                if ( ! is_term($default, $taxonomy) )
     125                        unset($default);
     126        }
     127
     128        // Update children to point to new parent
     129        if ( is_taxonomy_hierarchical($taxonomy) ) {
     130                $term_obj = get_term($term, $taxonomy);
     131                $parent = $term_obj->parent;
     132
     133                $wpdb->query("UPDATE $wpdb->term_taxonomy SET parent = '$parent' WHERE parent = '$term_obj->term_id' AND taxonomy = '$taxonomy'");
     134        }
     135
     136        $objects = $wpdb->get_col("SELECT object_id FROM $wpdb->term_relationships WHERE term_taxonomy_id = '$tt_id'");
     137
     138        foreach ( (array) $objects as $object ) {
     139                $terms = get_object_terms($object, $taxonomy, 'get=ids');
     140                if ( 1 == count($terms) && isset($default) )
     141                        $terms = array($default);
     142                else
     143                        $terms = array_diff($terms, array($term));
     144                wp_set_object_terms($object, $terms, $taxonomy);
     145        }
     146
     147        $wpdb->query("DELETE FROM $wpdb->term_taxonomy WHERE term_taxonomy_id = '$tt_id'");
     148
     149        //clean_term_cache($term, $taxonomy);
     150        do_action("delete_$taxonomy", $term, $tt_id);
     151
     152        return true;
     153}
    102154
    103155function wp_update_term( $term, $taxonomy, $args = array() ) {
Note: See TracChangeset for help on using the changeset viewer.