raw
mp-wp_genesis           1 <?php
mp-wp_genesis 2 /**
mp-wp_genesis 3 * WordPress Categories to Tags Converter.
mp-wp_genesis 4 *
mp-wp_genesis 5 * @package WordPress
mp-wp_genesis 6 * @subpackage Importer
mp-wp_genesis 7 */
mp-wp_genesis 8
mp-wp_genesis 9 /**
mp-wp_genesis 10 * WordPress categories to tags converter class.
mp-wp_genesis 11 *
mp-wp_genesis 12 * Will convert WordPress categories to tags, removing the category after the
mp-wp_genesis 13 * process is complete and updating all posts to switch to the tag.
mp-wp_genesis 14 *
mp-wp_genesis 15 * @since unknown
mp-wp_genesis 16 */
mp-wp_genesis 17 class WP_Categories_to_Tags {
mp-wp_genesis 18 var $categories_to_convert = array();
mp-wp_genesis 19 var $all_categories = array();
mp-wp_genesis 20 var $tags_to_convert = array();
mp-wp_genesis 21 var $all_tags = array();
mp-wp_genesis 22 var $hybrids_ids = array();
mp-wp_genesis 23
mp-wp_genesis 24 function header() {
mp-wp_genesis 25 echo '<div class="wrap">';
mp-wp_genesis 26 if ( ! current_user_can('manage_categories') ) {
mp-wp_genesis 27 echo '<div class="narrow">';
mp-wp_genesis 28 echo '<p>' . __('Cheatin&#8217; uh?') . '</p>';
mp-wp_genesis 29 echo '</div>';
mp-wp_genesis 30 } else { ?>
mp-wp_genesis 31 <div class="tablenav"><p style="margin:4px"><a style="display:inline;" class="button-secondary" href="admin.php?import=wp-cat2tag"><?php _e( "Categories to Tags" ); ?></a>
mp-wp_genesis 32 <a style="display:inline;" class="button-secondary" href="admin.php?import=wp-cat2tag&amp;step=3"><?php _e( "Tags to Categories" ); ?></a></p></div>
mp-wp_genesis 33 <?php }
mp-wp_genesis 34 }
mp-wp_genesis 35
mp-wp_genesis 36 function footer() {
mp-wp_genesis 37 echo '</div>';
mp-wp_genesis 38 }
mp-wp_genesis 39
mp-wp_genesis 40 function populate_cats() {
mp-wp_genesis 41
mp-wp_genesis 42 $categories = get_categories('get=all');
mp-wp_genesis 43 foreach ( $categories as $category ) {
mp-wp_genesis 44 $this->all_categories[] = $category;
mp-wp_genesis 45 if ( is_term( $category->slug, 'post_tag' ) )
mp-wp_genesis 46 $this->hybrids_ids[] = $category->term_id;
mp-wp_genesis 47 }
mp-wp_genesis 48 }
mp-wp_genesis 49
mp-wp_genesis 50 function populate_tags() {
mp-wp_genesis 51
mp-wp_genesis 52 $tags = get_terms( array('post_tag'), 'get=all' );
mp-wp_genesis 53 foreach ( $tags as $tag ) {
mp-wp_genesis 54 $this->all_tags[] = $tag;
mp-wp_genesis 55 if ( is_term( $tag->slug, 'category' ) )
mp-wp_genesis 56 $this->hybrids_ids[] = $tag->term_id;
mp-wp_genesis 57 }
mp-wp_genesis 58 }
mp-wp_genesis 59
mp-wp_genesis 60 function categories_tab() {
mp-wp_genesis 61 $this->populate_cats();
mp-wp_genesis 62 $cat_num = count($this->all_categories);
mp-wp_genesis 63
mp-wp_genesis 64 echo '<br class="clear" />';
mp-wp_genesis 65
mp-wp_genesis 66 if ( $cat_num > 0 ) {
mp-wp_genesis 67 screen_icon();
mp-wp_genesis 68 echo '<h2>' . sprintf( __ngettext( 'Convert Category to Tag.', 'Convert Categories (%d) to Tags.', $cat_num ), $cat_num ) . '</h2>';
mp-wp_genesis 69 echo '<div class="narrow">';
mp-wp_genesis 70 echo '<p>' . __('Hey there. Here you can selectively convert existing categories to tags. To get started, check the categories you wish to be converted, then click the Convert button.') . '</p>';
mp-wp_genesis 71 echo '<p>' . __('Keep in mind that if you convert a category with child categories, the children become top-level orphans.') . '</p></div>';
mp-wp_genesis 72
mp-wp_genesis 73 $this->categories_form();
mp-wp_genesis 74 } else {
mp-wp_genesis 75 echo '<p>'.__('You have no categories to convert!').'</p>';
mp-wp_genesis 76 }
mp-wp_genesis 77 }
mp-wp_genesis 78
mp-wp_genesis 79 function categories_form() { ?>
mp-wp_genesis 80
mp-wp_genesis 81 <script type="text/javascript">
mp-wp_genesis 82 /* <![CDATA[ */
mp-wp_genesis 83 var checkflag = "false";
mp-wp_genesis 84 function check_all_rows() {
mp-wp_genesis 85 field = document.catlist;
mp-wp_genesis 86 if ( 'false' == checkflag ) {
mp-wp_genesis 87 for ( i = 0; i < field.length; i++ ) {
mp-wp_genesis 88 if ( 'cats_to_convert[]' == field[i].name )
mp-wp_genesis 89 field[i].checked = true;
mp-wp_genesis 90 }
mp-wp_genesis 91 checkflag = 'true';
mp-wp_genesis 92 return '<?php _e('Uncheck All') ?>';
mp-wp_genesis 93 } else {
mp-wp_genesis 94 for ( i = 0; i < field.length; i++ ) {
mp-wp_genesis 95 if ( 'cats_to_convert[]' == field[i].name )
mp-wp_genesis 96 field[i].checked = false;
mp-wp_genesis 97 }
mp-wp_genesis 98 checkflag = 'false';
mp-wp_genesis 99 return '<?php _e('Check All') ?>';
mp-wp_genesis 100 }
mp-wp_genesis 101 }
mp-wp_genesis 102 /* ]]> */
mp-wp_genesis 103 </script>
mp-wp_genesis 104
mp-wp_genesis 105 <form name="catlist" id="catlist" action="admin.php?import=wp-cat2tag&amp;step=2" method="post">
mp-wp_genesis 106 <p><input type="button" class="button-secondary" value="<?php _e('Check All'); ?>" onclick="this.value=check_all_rows()" />
mp-wp_genesis 107 <?php wp_nonce_field('import-cat2tag'); ?></p>
mp-wp_genesis 108 <ul style="list-style:none">
mp-wp_genesis 109
mp-wp_genesis 110 <?php $hier = _get_term_hierarchy('category');
mp-wp_genesis 111
mp-wp_genesis 112 foreach ($this->all_categories as $category) {
mp-wp_genesis 113 $category = sanitize_term( $category, 'category', 'display' );
mp-wp_genesis 114
mp-wp_genesis 115 if ( (int) $category->parent == 0 ) { ?>
mp-wp_genesis 116
mp-wp_genesis 117 <li><label><input type="checkbox" name="cats_to_convert[]" value="<?php echo intval($category->term_id); ?>" /> <?php echo $category->name . ' (' . $category->count . ')'; ?></label><?php
mp-wp_genesis 118
mp-wp_genesis 119 if ( in_array( intval($category->term_id), $this->hybrids_ids ) )
mp-wp_genesis 120 echo ' <a href="#note"> * </a>';
mp-wp_genesis 121
mp-wp_genesis 122 if ( isset($hier[$category->term_id]) )
mp-wp_genesis 123 $this->_category_children($category, $hier); ?></li>
mp-wp_genesis 124 <?php }
mp-wp_genesis 125 } ?>
mp-wp_genesis 126 </ul>
mp-wp_genesis 127
mp-wp_genesis 128 <?php if ( ! empty($this->hybrids_ids) )
mp-wp_genesis 129 echo '<p><a name="note"></a>' . __('* This category is also a tag. Converting it will add that tag to all posts that are currently in the category.') . '</p>'; ?>
mp-wp_genesis 130
mp-wp_genesis 131 <p class="submit"><input type="submit" name="submit" class="button" value="<?php _e('Convert Categories to Tags'); ?>" /></p>
mp-wp_genesis 132 </form>
mp-wp_genesis 133
mp-wp_genesis 134 <?php }
mp-wp_genesis 135
mp-wp_genesis 136 function tags_tab() {
mp-wp_genesis 137 $this->populate_tags();
mp-wp_genesis 138 $tags_num = count($this->all_tags);
mp-wp_genesis 139
mp-wp_genesis 140 echo '<br class="clear" />';
mp-wp_genesis 141
mp-wp_genesis 142 if ( $tags_num > 0 ) {
mp-wp_genesis 143 screen_icon();
mp-wp_genesis 144 echo '<h2>' . sprintf( __ngettext( 'Convert Tag to Category.', 'Convert Tags (%d) to Categories.', $tags_num ), $tags_num ) . '</h2>';
mp-wp_genesis 145 echo '<div class="narrow">';
mp-wp_genesis 146 echo '<p>' . __('Here you can selectively converts existing tags to categories. To get started, check the tags you wish to be converted, then click the Convert button.') . '</p>';
mp-wp_genesis 147 echo '<p>' . __('The newly created categories will still be associated with the same posts.') . '</p></div>';
mp-wp_genesis 148
mp-wp_genesis 149 $this->tags_form();
mp-wp_genesis 150 } else {
mp-wp_genesis 151 echo '<p>'.__('You have no tags to convert!').'</p>';
mp-wp_genesis 152 }
mp-wp_genesis 153 }
mp-wp_genesis 154
mp-wp_genesis 155 function tags_form() { ?>
mp-wp_genesis 156
mp-wp_genesis 157 <script type="text/javascript">
mp-wp_genesis 158 /* <![CDATA[ */
mp-wp_genesis 159 var checktags = "false";
mp-wp_genesis 160 function check_all_tagrows() {
mp-wp_genesis 161 field = document.taglist;
mp-wp_genesis 162 if ( 'false' == checktags ) {
mp-wp_genesis 163 for ( i = 0; i < field.length; i++ ) {
mp-wp_genesis 164 if ( 'tags_to_convert[]' == field[i].name )
mp-wp_genesis 165 field[i].checked = true;
mp-wp_genesis 166 }
mp-wp_genesis 167 checktags = 'true';
mp-wp_genesis 168 return '<?php _e('Uncheck All') ?>';
mp-wp_genesis 169 } else {
mp-wp_genesis 170 for ( i = 0; i < field.length; i++ ) {
mp-wp_genesis 171 if ( 'tags_to_convert[]' == field[i].name )
mp-wp_genesis 172 field[i].checked = false;
mp-wp_genesis 173 }
mp-wp_genesis 174 checktags = 'false';
mp-wp_genesis 175 return '<?php _e('Check All') ?>';
mp-wp_genesis 176 }
mp-wp_genesis 177 }
mp-wp_genesis 178 /* ]]> */
mp-wp_genesis 179 </script>
mp-wp_genesis 180
mp-wp_genesis 181 <form name="taglist" id="taglist" action="admin.php?import=wp-cat2tag&amp;step=4" method="post">
mp-wp_genesis 182 <p><input type="button" class="button-secondary" value="<?php _e('Check All'); ?>" onclick="this.value=check_all_tagrows()" />
mp-wp_genesis 183 <?php wp_nonce_field('import-cat2tag'); ?></p>
mp-wp_genesis 184 <ul style="list-style:none">
mp-wp_genesis 185
mp-wp_genesis 186 <?php foreach ( $this->all_tags as $tag ) { ?>
mp-wp_genesis 187 <li><label><input type="checkbox" name="tags_to_convert[]" value="<?php echo intval($tag->term_id); ?>" /> <?php echo attribute_escape($tag->name) . ' (' . $tag->count . ')'; ?></label><?php if ( in_array( intval($tag->term_id), $this->hybrids_ids ) ) echo ' <a href="#note"> * </a>'; ?></li>
mp-wp_genesis 188
mp-wp_genesis 189 <?php } ?>
mp-wp_genesis 190 </ul>
mp-wp_genesis 191
mp-wp_genesis 192 <?php if ( ! empty($this->hybrids_ids) )
mp-wp_genesis 193 echo '<p><a name="note"></a>' . __('* This tag is also a category. When converted, all posts associated with the tag will also be in the category.') . '</p>'; ?>
mp-wp_genesis 194
mp-wp_genesis 195 <p class="submit"><input type="submit" name="submit_tags" class="button" value="<?php _e('Convert Tags to Categories'); ?>" /></p>
mp-wp_genesis 196 </form>
mp-wp_genesis 197
mp-wp_genesis 198 <?php }
mp-wp_genesis 199
mp-wp_genesis 200 function _category_children($parent, $hier) { ?>
mp-wp_genesis 201
mp-wp_genesis 202 <ul style="list-style:none">
mp-wp_genesis 203 <?php foreach ($hier[$parent->term_id] as $child_id) {
mp-wp_genesis 204 $child =& get_category($child_id); ?>
mp-wp_genesis 205 <li><label><input type="checkbox" name="cats_to_convert[]" value="<?php echo intval($child->term_id); ?>" /> <?php echo $child->name . ' (' . $child->count . ')'; ?></label><?php
mp-wp_genesis 206
mp-wp_genesis 207 if ( in_array( intval($child->term_id), $this->hybrids_ids ) )
mp-wp_genesis 208 echo ' <a href="#note"> * </a>';
mp-wp_genesis 209
mp-wp_genesis 210 if ( isset($hier[$child->term_id]) )
mp-wp_genesis 211 $this->_category_children($child, $hier); ?></li>
mp-wp_genesis 212 <?php } ?>
mp-wp_genesis 213 </ul><?php
mp-wp_genesis 214 }
mp-wp_genesis 215
mp-wp_genesis 216 function _category_exists($cat_id) {
mp-wp_genesis 217 $cat_id = (int) $cat_id;
mp-wp_genesis 218
mp-wp_genesis 219 $maybe_exists = category_exists($cat_id);
mp-wp_genesis 220
mp-wp_genesis 221 if ( $maybe_exists ) {
mp-wp_genesis 222 return true;
mp-wp_genesis 223 } else {
mp-wp_genesis 224 return false;
mp-wp_genesis 225 }
mp-wp_genesis 226 }
mp-wp_genesis 227
mp-wp_genesis 228 function convert_categories() {
mp-wp_genesis 229 global $wpdb;
mp-wp_genesis 230
mp-wp_genesis 231 if ( (!isset($_POST['cats_to_convert']) || !is_array($_POST['cats_to_convert'])) && empty($this->categories_to_convert)) { ?>
mp-wp_genesis 232 <div class="narrow">
mp-wp_genesis 233 <p><?php printf(__('Uh, oh. Something didn&#8217;t work. Please <a href="%s">try again</a>.'), 'admin.php?import=wp-cat2tag'); ?></p>
mp-wp_genesis 234 </div>
mp-wp_genesis 235 <?php return;
mp-wp_genesis 236 }
mp-wp_genesis 237
mp-wp_genesis 238 if ( empty($this->categories_to_convert) )
mp-wp_genesis 239 $this->categories_to_convert = $_POST['cats_to_convert'];
mp-wp_genesis 240
mp-wp_genesis 241 $hier = _get_term_hierarchy('category');
mp-wp_genesis 242 $hybrid_cats = $clear_parents = $parents = false;
mp-wp_genesis 243 $clean_term_cache = $clean_cat_cache = array();
mp-wp_genesis 244 $default_cat = get_option('default_category');
mp-wp_genesis 245
mp-wp_genesis 246 echo '<ul>';
mp-wp_genesis 247
mp-wp_genesis 248 foreach ( (array) $this->categories_to_convert as $cat_id) {
mp-wp_genesis 249 $cat_id = (int) $cat_id;
mp-wp_genesis 250
mp-wp_genesis 251 if ( ! $this->_category_exists($cat_id) ) {
mp-wp_genesis 252 echo '<li>' . sprintf( __('Category %s doesn\'t exist!'), $cat_id ) . "</li>\n";
mp-wp_genesis 253 } else {
mp-wp_genesis 254 $category =& get_category($cat_id);
mp-wp_genesis 255 echo '<li>' . sprintf(__('Converting category <strong>%s</strong> ... '), $category->name);
mp-wp_genesis 256
mp-wp_genesis 257 // If the category is the default, leave category in place and create tag.
mp-wp_genesis 258 if ( $default_cat == $category->term_id ) {
mp-wp_genesis 259
mp-wp_genesis 260 if ( ! ($id = is_term( $category->slug, 'post_tag' ) ) )
mp-wp_genesis 261 $id = wp_insert_term($category->name, 'post_tag', array('slug' => $category->slug));
mp-wp_genesis 262
mp-wp_genesis 263 $id = $id['term_taxonomy_id'];
mp-wp_genesis 264 $posts = get_objects_in_term($category->term_id, 'category');
mp-wp_genesis 265 $term_order = 0;
mp-wp_genesis 266
mp-wp_genesis 267 foreach ( $posts as $post ) {
mp-wp_genesis 268 $values[] = $wpdb->prepare( "(%d, %d, %d)", $post, $id, $term_order);
mp-wp_genesis 269 clean_post_cache($post);
mp-wp_genesis 270 }
mp-wp_genesis 271
mp-wp_genesis 272 if ( $values ) {
mp-wp_genesis 273 $wpdb->query("INSERT INTO $wpdb->term_relationships (object_id, term_taxonomy_id, term_order) VALUES " . join(',', $values) . " ON DUPLICATE KEY UPDATE term_order = VALUES(term_order)");
mp-wp_genesis 274
mp-wp_genesis 275 $wpdb->query( $wpdb->prepare("UPDATE $wpdb->term_taxonomy SET count = %d WHERE term_id = %d AND taxonomy = 'post_tag'", $category->count, $category->term_id) );
mp-wp_genesis 276 }
mp-wp_genesis 277
mp-wp_genesis 278 echo __('Converted successfully.') . "</li>\n";
mp-wp_genesis 279 continue;
mp-wp_genesis 280 }
mp-wp_genesis 281
mp-wp_genesis 282 // if tag already exists, add it to all posts in the category
mp-wp_genesis 283 if ( $tag_ttid = $wpdb->get_var( $wpdb->prepare("SELECT term_taxonomy_id FROM $wpdb->term_taxonomy WHERE term_id = %d AND taxonomy = 'post_tag'", $category->term_id) ) ) {
mp-wp_genesis 284 $objects_ids = get_objects_in_term($category->term_id, 'category');
mp-wp_genesis 285 $tag_ttid = (int) $tag_ttid;
mp-wp_genesis 286 $term_order = 0;
mp-wp_genesis 287
mp-wp_genesis 288 foreach ( $objects_ids as $object_id )
mp-wp_genesis 289 $values[] = $wpdb->prepare( "(%d, %d, %d)", $object_id, $tag_ttid, $term_order);
mp-wp_genesis 290
mp-wp_genesis 291 if ( $values ) {
mp-wp_genesis 292 $wpdb->query("INSERT INTO $wpdb->term_relationships (object_id, term_taxonomy_id, term_order) VALUES " . join(',', $values) . " ON DUPLICATE KEY UPDATE term_order = VALUES(term_order)");
mp-wp_genesis 293
mp-wp_genesis 294 $count = $wpdb->get_var( $wpdb->prepare("SELECT COUNT(*) FROM $wpdb->term_relationships WHERE term_taxonomy_id = %d", $tag_ttid) );
mp-wp_genesis 295 $wpdb->query( $wpdb->prepare("UPDATE $wpdb->term_taxonomy SET count = %d WHERE term_id = %d AND taxonomy = 'post_tag'", $count, $category->term_id) );
mp-wp_genesis 296 }
mp-wp_genesis 297 echo __('Tag added to all posts in this category.') . " *</li>\n";
mp-wp_genesis 298
mp-wp_genesis 299 $hybrid_cats = true;
mp-wp_genesis 300 $clean_term_cache[] = $category->term_id;
mp-wp_genesis 301 $clean_cat_cache[] = $category->term_id;
mp-wp_genesis 302
mp-wp_genesis 303 continue;
mp-wp_genesis 304 }
mp-wp_genesis 305
mp-wp_genesis 306 $tt_ids = $wpdb->get_col( $wpdb->prepare("SELECT term_taxonomy_id FROM $wpdb->term_taxonomy WHERE term_id = %d AND taxonomy = 'category'", $category->term_id) );
mp-wp_genesis 307 if ( $tt_ids ) {
mp-wp_genesis 308 $posts = $wpdb->get_col("SELECT object_id FROM $wpdb->term_relationships WHERE term_taxonomy_id IN (" . join(',', $tt_ids) . ") GROUP BY object_id");
mp-wp_genesis 309 foreach ( (array) $posts as $post )
mp-wp_genesis 310 clean_post_cache($post);
mp-wp_genesis 311 }
mp-wp_genesis 312
mp-wp_genesis 313 // Change the category to a tag.
mp-wp_genesis 314 $wpdb->query( $wpdb->prepare("UPDATE $wpdb->term_taxonomy SET taxonomy = 'post_tag' WHERE term_id = %d AND taxonomy = 'category'", $category->term_id) );
mp-wp_genesis 315
mp-wp_genesis 316 // Set all parents to 0 (root-level) if their parent was the converted tag
mp-wp_genesis 317 $parents = $wpdb->query( $wpdb->prepare("UPDATE $wpdb->term_taxonomy SET parent = 0 WHERE parent = %d AND taxonomy = 'category'", $category->term_id) );
mp-wp_genesis 318
mp-wp_genesis 319 if ( $parents ) $clear_parents = true;
mp-wp_genesis 320 $clean_cat_cache[] = $category->term_id;
mp-wp_genesis 321 echo __('Converted successfully.') . "</li>\n";
mp-wp_genesis 322 }
mp-wp_genesis 323 }
mp-wp_genesis 324 echo '</ul>';
mp-wp_genesis 325
mp-wp_genesis 326 if ( ! empty($clean_term_cache) ) {
mp-wp_genesis 327 $clean_term_cache = array_unique(array_values($clean_term_cache));
mp-wp_genesis 328 foreach ( $clean_term_cache as $id )
mp-wp_genesis 329 wp_cache_delete($id, 'post_tag');
mp-wp_genesis 330 }
mp-wp_genesis 331
mp-wp_genesis 332 if ( ! empty($clean_cat_cache) ) {
mp-wp_genesis 333 $clean_cat_cache = array_unique(array_values($clean_cat_cache));
mp-wp_genesis 334 foreach ( $clean_cat_cache as $id )
mp-wp_genesis 335 wp_cache_delete($id, 'category');
mp-wp_genesis 336 }
mp-wp_genesis 337
mp-wp_genesis 338 if ( $clear_parents ) delete_option('category_children');
mp-wp_genesis 339
mp-wp_genesis 340 if ( $hybrid_cats )
mp-wp_genesis 341 echo '<p>' . sprintf( __('* This category is also a tag. The converter has added that tag to all posts currently in the category. If you want to remove it, please confirm that all tags were added successfully, then delete it from the <a href="%s">Manage Categories</a> page.'), 'categories.php') . '</p>';
mp-wp_genesis 342 echo '<p>' . sprintf( __('We&#8217;re all done here, but you can always <a href="%s">convert more</a>.'), 'admin.php?import=wp-cat2tag' ) . '</p>';
mp-wp_genesis 343 }
mp-wp_genesis 344
mp-wp_genesis 345 function convert_tags() {
mp-wp_genesis 346 global $wpdb;
mp-wp_genesis 347
mp-wp_genesis 348 if ( (!isset($_POST['tags_to_convert']) || !is_array($_POST['tags_to_convert'])) && empty($this->tags_to_convert)) {
mp-wp_genesis 349 echo '<div class="narrow">';
mp-wp_genesis 350 echo '<p>' . sprintf(__('Uh, oh. Something didn&#8217;t work. Please <a href="%s">try again</a>.'), 'admin.php?import=wp-cat2tag&amp;step=3') . '</p>';
mp-wp_genesis 351 echo '</div>';
mp-wp_genesis 352 return;
mp-wp_genesis 353 }
mp-wp_genesis 354
mp-wp_genesis 355 if ( empty($this->tags_to_convert) )
mp-wp_genesis 356 $this->tags_to_convert = $_POST['tags_to_convert'];
mp-wp_genesis 357
mp-wp_genesis 358 $hybrid_tags = $clear_parents = false;
mp-wp_genesis 359 $clean_cat_cache = $clean_term_cache = array();
mp-wp_genesis 360 $default_cat = get_option('default_category');
mp-wp_genesis 361 echo '<ul>';
mp-wp_genesis 362
mp-wp_genesis 363 foreach ( (array) $this->tags_to_convert as $tag_id) {
mp-wp_genesis 364 $tag_id = (int) $tag_id;
mp-wp_genesis 365
mp-wp_genesis 366 if ( $tag = get_term( $tag_id, 'post_tag' ) ) {
mp-wp_genesis 367 printf('<li>' . __('Converting tag <strong>%s</strong> ... '), $tag->name);
mp-wp_genesis 368
mp-wp_genesis 369 if ( $cat_ttid = $wpdb->get_var( $wpdb->prepare("SELECT term_taxonomy_id FROM $wpdb->term_taxonomy WHERE term_id = %d AND taxonomy = 'category'", $tag->term_id) ) ) {
mp-wp_genesis 370 $objects_ids = get_objects_in_term($tag->term_id, 'post_tag');
mp-wp_genesis 371 $cat_ttid = (int) $cat_ttid;
mp-wp_genesis 372 $term_order = 0;
mp-wp_genesis 373
mp-wp_genesis 374 foreach ( $objects_ids as $object_id ) {
mp-wp_genesis 375 $values[] = $wpdb->prepare( "(%d, %d, %d)", $object_id, $cat_ttid, $term_order);
mp-wp_genesis 376 clean_post_cache($object_id);
mp-wp_genesis 377 }
mp-wp_genesis 378
mp-wp_genesis 379 if ( $values ) {
mp-wp_genesis 380 $wpdb->query("INSERT INTO $wpdb->term_relationships (object_id, term_taxonomy_id, term_order) VALUES " . join(',', $values) . " ON DUPLICATE KEY UPDATE term_order = VALUES(term_order)");
mp-wp_genesis 381
mp-wp_genesis 382 if ( $default_cat != $tag->term_id ) {
mp-wp_genesis 383 $count = $wpdb->get_var( $wpdb->prepare("SELECT COUNT(*) FROM $wpdb->term_relationships WHERE term_taxonomy_id = %d", $tag->term_id) );
mp-wp_genesis 384 $wpdb->query( $wpdb->prepare("UPDATE $wpdb->term_taxonomy SET count = %d WHERE term_id = %d AND taxonomy = 'category'", $count, $tag->term_id) );
mp-wp_genesis 385 }
mp-wp_genesis 386 }
mp-wp_genesis 387
mp-wp_genesis 388 $hybrid_tags = true;
mp-wp_genesis 389 $clean_term_cache[] = $tag->term_id;
mp-wp_genesis 390 $clean_cat_cache[] = $tag->term_id;
mp-wp_genesis 391 echo __('All posts were added to the category with the same name.') . " *</li>\n";
mp-wp_genesis 392
mp-wp_genesis 393 continue;
mp-wp_genesis 394 }
mp-wp_genesis 395
mp-wp_genesis 396 // Change the tag to a category.
mp-wp_genesis 397 $parent = $wpdb->get_var( $wpdb->prepare("SELECT parent FROM $wpdb->term_taxonomy WHERE term_id = %d AND taxonomy = 'post_tag'", $tag->term_id) );
mp-wp_genesis 398 if ( 0 == $parent || (0 < (int) $parent && $this->_category_exists($parent)) ) {
mp-wp_genesis 399 $reset_parent = '';
mp-wp_genesis 400 $clear_parents = true;
mp-wp_genesis 401 } else
mp-wp_genesis 402 $reset_parent = ", parent = '0'";
mp-wp_genesis 403
mp-wp_genesis 404 $wpdb->query( $wpdb->prepare("UPDATE $wpdb->term_taxonomy SET taxonomy = 'category' $reset_parent WHERE term_id = %d AND taxonomy = 'post_tag'", $tag->term_id) );
mp-wp_genesis 405
mp-wp_genesis 406 $clean_term_cache[] = $tag->term_id;
mp-wp_genesis 407 $clean_cat_cache[] = $cat['term_id'];
mp-wp_genesis 408 echo __('Converted successfully.') . "</li>\n";
mp-wp_genesis 409
mp-wp_genesis 410 } else {
mp-wp_genesis 411 printf( '<li>' . __('Tag #%s doesn\'t exist!') . "</li>\n", $tag_id );
mp-wp_genesis 412 }
mp-wp_genesis 413 }
mp-wp_genesis 414
mp-wp_genesis 415 if ( ! empty($clean_term_cache) ) {
mp-wp_genesis 416 $clean_term_cache = array_unique(array_values($clean_term_cache));
mp-wp_genesis 417 foreach ( $clean_term_cache as $id )
mp-wp_genesis 418 wp_cache_delete($id, 'post_tag');
mp-wp_genesis 419 }
mp-wp_genesis 420
mp-wp_genesis 421 if ( ! empty($clean_cat_cache) ) {
mp-wp_genesis 422 $clean_cat_cache = array_unique(array_values($clean_cat_cache));
mp-wp_genesis 423 foreach ( $clean_cat_cache as $id )
mp-wp_genesis 424 wp_cache_delete($id, 'category');
mp-wp_genesis 425 }
mp-wp_genesis 426
mp-wp_genesis 427 if ( $clear_parents ) delete_option('category_children');
mp-wp_genesis 428
mp-wp_genesis 429 echo '</ul>';
mp-wp_genesis 430 if ( $hybrid_tags )
mp-wp_genesis 431 echo '<p>' . sprintf( __('* This tag is also a category. The converter has added all posts from it to the category. If you want to remove it, please confirm that all posts were added successfully, then delete it from the <a href="%s">Manage Tags</a> page.'), 'edit-tags.php') . '</p>';
mp-wp_genesis 432 echo '<p>' . sprintf( __('We&#8217;re all done here, but you can always <a href="%s">convert more</a>.'), 'admin.php?import=wp-cat2tag&amp;step=3' ) . '</p>';
mp-wp_genesis 433 }
mp-wp_genesis 434
mp-wp_genesis 435 function init() {
mp-wp_genesis 436
mp-wp_genesis 437 $step = (isset($_GET['step'])) ? (int) $_GET['step'] : 1;
mp-wp_genesis 438
mp-wp_genesis 439 $this->header();
mp-wp_genesis 440
mp-wp_genesis 441 if ( current_user_can('manage_categories') ) {
mp-wp_genesis 442
mp-wp_genesis 443 switch ($step) {
mp-wp_genesis 444 case 1 :
mp-wp_genesis 445 $this->categories_tab();
mp-wp_genesis 446 break;
mp-wp_genesis 447
mp-wp_genesis 448 case 2 :
mp-wp_genesis 449 check_admin_referer('import-cat2tag');
mp-wp_genesis 450 $this->convert_categories();
mp-wp_genesis 451 break;
mp-wp_genesis 452
mp-wp_genesis 453 case 3 :
mp-wp_genesis 454 $this->tags_tab();
mp-wp_genesis 455 break;
mp-wp_genesis 456
mp-wp_genesis 457 case 4 :
mp-wp_genesis 458 check_admin_referer('import-cat2tag');
mp-wp_genesis 459 $this->convert_tags();
mp-wp_genesis 460 break;
mp-wp_genesis 461 }
mp-wp_genesis 462 }
mp-wp_genesis 463
mp-wp_genesis 464 $this->footer();
mp-wp_genesis 465 }
mp-wp_genesis 466
mp-wp_genesis 467 function WP_Categories_to_Tags() {
mp-wp_genesis 468 // Do nothing.
mp-wp_genesis 469 }
mp-wp_genesis 470 }
mp-wp_genesis 471
mp-wp_genesis 472 $wp_cat2tag_importer = new WP_Categories_to_Tags();
mp-wp_genesis 473
mp-wp_genesis 474 register_importer('wp-cat2tag', __('Categories and Tags Converter'), __('Convert existing categories to tags or tags to categories, selectively.'), array(&$wp_cat2tag_importer, 'init'));
mp-wp_genesis 475
mp-wp_genesis 476 ?>