WordPress.org

Make WordPress Core

Changeset 5533


Ignore:
Timestamp:
05/23/07 22:03:24 (7 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.