WordPress.org

Make WordPress Core

Ticket #6035: 6035.diff

File 6035.diff, 2.5 KB (added by Denis-de-Bernardy, 9 years ago)
  • wp-admin/import/wp-cat2tag.php

     
    108108<ul style="list-style:none">
    109109
    110110<?php   $hier = _get_term_hierarchy('category');
     111                 $default = get_option('default_category');
    111112
    112113                foreach ($this->all_categories as $category) {
    113114                        $category = sanitize_term( $category, 'category', 'display' );
    114115
    115                         if ( (int) $category->parent == 0 ) { ?>
     116                        if ( ((int) $category->parent == 0 ) && ( $category->term_id != $default )) { ?>
    116117
    117118        <li><label><input type="checkbox" name="cats_to_convert[]" value="<?php echo intval($category->term_id); ?>" /> <?php echo $category->name . ' (' . $category->count . ')'; ?></label><?php
    118119
     
    224225                        return false;
    225226                }
    226227        }
     228       
     229        function set_default_category() {
     230                global $wpdb;
     231               
     232                $default_cat_id = (int) get_option('default_category');
     233               
     234                if ( !$default_cat_id )
     235                        return;
     236               
     237                $default_cat = get_term_by('term_id', $default_cat_id, 'category');
     238                $tt_ids = array($default_cat->term_taxonomy_id);
     239                $terms = array($default_cat->term_id);
     240               
     241                # mass fetch ids
     242                $post_ids = $wpdb->get_results("
     243                        SELECT  posts.ID
     244                        FROM    $wpdb->posts as posts
     245                        LEFT JOIN $wpdb->term_relationships as term_relationships
     246                        ON              term_relationships.object_id = posts.ID
     247                        AND             term_relationships.term_taxonomy_id = $default_cat->term_taxonomy_id
     248                        WHERE   post_type = 'post'
     249                        AND             term_relationships.object_id IS NULL
     250                        ");
     251               
     252                # mass insert relationships
     253                $wpdb->query("
     254                        INSERT INTO $wpdb->term_relationships ( object_id, term_taxonomy_id )
     255                        SELECT  posts.ID, $default_cat->term_taxonomy_id
     256                        FROM    $wpdb->posts as posts
     257                        LEFT JOIN $wpdb->term_relationships as term_relationships
     258                        ON              term_relationships.object_id = posts.ID
     259                        AND             term_relationships.term_taxonomy_id = $default_cat->term_taxonomy_id
     260                        WHERE   posts.post_type = 'post'
     261                        AND             term_relationships.object_id IS NULL
     262                        ");
     263               
     264                # update count in one go
     265                wp_update_term_count_now($tt_ids, 'category');
     266               
     267                # mass do_action
     268                foreach ( $post_ids as $object_id ) {
     269                        do_action('set_object_terms', $object_id, $terms, $tt_ids, 'category', false);
     270                }
     271               
     272                echo __('Set default category on orphaned posts.')
     273        }
    227274
    228275        function convert_categories() {
    229276                global $wpdb;
     
    322369                        }
    323370                }
    324371                echo '</ul>';
     372               
     373                $this->set_default_category();
    325374
    326375                if ( ! empty($clean_term_cache) ) {
    327376                        $clean_term_cache = array_unique(array_values($clean_term_cache));