2007-04-07 04:58:28 +00:00
< ? php
class WP_Categories_to_Tags {
var $categories_to_convert = array ();
var $all_categories = array ();
2007-06-14 02:25:30 +00:00
2007-04-07 04:58:28 +00:00
function header () {
print '<div class="wrap">' ;
print '<h2>' . __ ( 'Convert Categories to Tags' ) . '</h2>' ;
}
2007-06-14 02:25:30 +00:00
2007-04-07 04:58:28 +00:00
function footer () {
print '</div>' ;
}
2007-06-14 02:25:30 +00:00
2007-04-07 04:58:28 +00:00
function populate_all_categories () {
2007-04-10 16:57:21 +00:00
global $wpdb ;
2007-06-14 02:25:30 +00:00
2007-09-11 19:54:19 +00:00
$categories = get_categories ( 'get=all' );
foreach ( $categories as $category ) {
if ( ! tag_exists ( $wpdb -> escape ( $category -> name )) )
$this -> all_categories [] = $category ;
}
2007-04-07 04:58:28 +00:00
}
2007-06-14 02:25:30 +00:00
2007-04-07 04:58:28 +00:00
function welcome () {
2007-04-12 05:46:36 +00:00
$this -> populate_all_categories ();
2007-06-14 02:25:30 +00:00
2007-04-07 04:58:28 +00:00
print '<div class="narrow">' ;
2007-06-14 02:25:30 +00:00
2007-04-12 05:46:36 +00:00
if ( count ( $this -> all_categories ) > 0 ) {
print '<p>' . __ ( 'Howdy! This converter allows you to selectively convert existing categories to tags. To get started, check the checkboxes of the categories you wish to be converted, then click the Convert button.' ) . '</p>' ;
print '<p>' . __ ( 'Keep in mind that if you convert a category with child categories, those child categories get their parent setting removed, so they\'re in the root.' ) . '</p>' ;
2007-06-14 02:25:30 +00:00
2007-04-12 05:46:36 +00:00
$this -> categories_form ();
} else {
2007-04-12 05:59:59 +00:00
print '<p>' . __ ( 'You have no categories to convert!' ) . '</p>' ;
2007-04-12 05:46:36 +00:00
}
2007-06-14 02:25:30 +00:00
2007-04-07 04:58:28 +00:00
print '</div>' ;
}
2007-06-14 02:25:30 +00:00
2007-04-07 04:58:28 +00:00
function categories_form () {
print '<form action="admin.php?import=wp-cat2tag&step=2" method="post">' ;
2007-08-25 17:07:10 +00:00
wp_nonce_field ( 'import-cat2tag' );
2007-04-07 04:58:28 +00:00
print '<ul style="list-style:none">' ;
2007-06-14 02:25:30 +00:00
2007-05-26 18:54:16 +00:00
$hier = _get_term_hierarchy ( 'category' );
2007-06-14 02:25:30 +00:00
2007-04-07 04:58:28 +00:00
foreach ( $this -> all_categories as $category ) {
2007-09-21 15:04:13 +00:00
$category = sanitize_term ( $category , 'category' , 'display' );
2007-05-26 18:54:16 +00:00
if (( int ) $category -> parent == 0 ) {
print '<li><label><input type="checkbox" name="cats_to_convert[]" value="' . intval ( $category -> term_id ) . '" /> ' . $category -> name . ' (' . $category -> count . ')</label>' ;
2007-06-14 02:25:30 +00:00
2007-05-26 18:54:16 +00:00
if ( isset ( $hier [ $category -> term_id ])) {
2007-04-07 04:58:28 +00:00
$this -> _category_children ( $category , $hier );
}
2007-06-14 02:25:30 +00:00
2007-04-07 04:58:28 +00:00
print '</li>' ;
}
}
2007-06-14 02:25:30 +00:00
2007-04-07 04:58:28 +00:00
print '</ul>' ;
2007-06-14 02:25:30 +00:00
2007-10-11 17:50:56 +00:00
print '<p class="submit"><input type="submit" name="submit" value="' . __ ( 'Convert »' ) . '" /></p>' ;
2007-04-07 04:58:28 +00:00
print '</form>' ;
}
2007-06-14 02:25:30 +00:00
2007-04-07 04:58:28 +00:00
function _category_children ( $parent , $hier ) {
print '<ul style="list-style:none">' ;
2007-06-14 02:25:30 +00:00
2007-05-26 18:54:16 +00:00
foreach ( $hier [ $parent -> term_id ] as $child_id ) {
2007-04-07 04:58:28 +00:00
$child =& get_category ( $child_id );
2007-06-14 02:25:30 +00:00
2007-05-26 18:54:16 +00:00
print '<li><label><input type="checkbox" name="cats_to_convert[]" value="' . intval ( $child -> term_id ) . '" /> ' . $child -> name . ' (' . $child -> count . ')</label>' ;
2007-06-14 02:25:30 +00:00
2007-05-26 18:54:16 +00:00
if ( isset ( $hier [ $child -> term_id ])) {
2007-04-07 04:58:28 +00:00
$this -> _category_children ( $child , $hier );
}
2007-06-14 02:25:30 +00:00
2007-04-07 04:58:28 +00:00
print '</li>' ;
}
2007-06-14 02:25:30 +00:00
2007-04-07 04:58:28 +00:00
print '</ul>' ;
}
2007-06-14 02:25:30 +00:00
2007-04-10 16:57:21 +00:00
function _category_exists ( $cat_id ) {
global $wpdb ;
2007-06-14 02:25:30 +00:00
2007-04-10 16:57:21 +00:00
$cat_id = ( int ) $cat_id ;
2007-06-14 02:25:30 +00:00
2007-05-26 18:54:16 +00:00
$maybe_exists = category_exists ( $cat_id );
2007-06-14 02:25:30 +00:00
2007-05-26 18:54:16 +00:00
if ( $maybe_exists ) {
2007-04-10 16:57:21 +00:00
return true ;
} else {
return false ;
}
}
2007-06-14 02:25:30 +00:00
2007-04-07 04:58:28 +00:00
function convert_them () {
global $wpdb ;
2007-06-14 02:25:30 +00:00
2007-08-29 22:47:07 +00:00
if ( ( ! isset ( $_POST [ 'cats_to_convert' ]) || ! is_array ( $_POST [ 'cats_to_convert' ])) && empty ( $this -> categories_to_convert )) {
2007-04-07 04:58:28 +00:00
print '<div class="narrow">' ;
print '<p>' . sprintf ( __ ( 'Uh, oh. Something didn\'t work. Please <a href="%s">try again</a>.' ), 'admin.php?import=wp-cat2tag' ) . '</p>' ;
print '</div>' ;
2007-08-29 22:47:07 +00:00
return ;
2007-04-07 04:58:28 +00:00
}
2007-06-14 02:25:30 +00:00
2007-05-26 18:54:16 +00:00
if ( empty ( $this -> categories_to_convert ) )
$this -> categories_to_convert = $_POST [ 'cats_to_convert' ];
$hier = _get_term_hierarchy ( 'category' );
2007-06-14 02:25:30 +00:00
2007-04-07 04:58:28 +00:00
print '<ul>' ;
2007-06-14 02:25:30 +00:00
2007-08-29 22:47:07 +00:00
foreach ( ( array ) $this -> categories_to_convert as $cat_id ) {
2007-04-07 04:58:28 +00:00
$cat_id = ( int ) $cat_id ;
2007-06-14 02:25:30 +00:00
2007-08-29 22:47:07 +00:00
print '<li>' . sprintf ( __ ( 'Converting category #%s ... ' ), $cat_id );
2007-06-14 02:25:30 +00:00
2007-04-10 16:57:21 +00:00
if ( ! $this -> _category_exists ( $cat_id )) {
2007-04-07 04:58:28 +00:00
_e ( 'Category doesn\'t exist!' );
} else {
$category =& get_category ( $cat_id );
2007-06-14 02:25:30 +00:00
2007-08-29 22:47:07 +00:00
if ( tag_exists ( $wpdb -> escape ( $category -> name )) ) {
_e ( 'Category is already a tag.' );
print '</li>' ;
continue ;
}
2007-09-11 19:33:35 +00:00
// If the category is the default, leave category in place and create tag.
if ( get_option ( 'default_category' ) == $category -> term_id ) {
$id = wp_insert_term ( $category -> name , 'post_tag' , array ( 'slug' => $category -> slug ));
$id = $id [ 'term_taxonomy_id' ];
$posts = get_objects_in_term ( $category -> term_id , 'category' );
foreach ( $posts as $post ) {
if ( ! $wpdb -> get_var ( " SELECT object_id FROM $wpdb->term_relationships WHERE object_id = ' $post ' AND term_taxonomy_id = ' $id ' " ) )
$wpdb -> query ( " INSERT INTO $wpdb->term_relationships (object_id, term_taxonomy_id) VALUES (' $post ', ' $id ') " );
2007-10-08 22:39:20 +00:00
clean_post_cache ( $post );
2007-09-11 19:33:35 +00:00
}
} else {
2007-10-08 22:39:20 +00:00
$tt_ids = $wpdb -> get_col ( " SELECT term_taxonomy_id FROM $wpdb->term_taxonomy WHERE term_id = ' { $category -> term_id } ' AND taxonomy = 'category' " );
if ( $tt_ids ) {
$posts = $wpdb -> get_col ( " SELECT object_id FROM $wpdb->term_relationships WHERE term_taxonomy_id IN ( " . join ( ',' , $tt_ids ) . " ) GROUP BY object_id " );
foreach ( ( array ) $posts as $post )
clean_post_cache ( $post );
}
2007-09-11 19:33:35 +00:00
// Change the category to a tag.
$wpdb -> query ( " UPDATE $wpdb->term_taxonomy SET taxonomy = 'post_tag' WHERE term_id = ' { $category -> term_id } ' AND taxonomy = 'category' " );
2007-10-08 22:39:20 +00:00
$terms = $wpdb -> get_col ( " SELECT term_id FROM $wpdb->term_taxonomy WHERE parent = ' { $category -> term_id } ' AND taxonomy = 'category' " );
foreach ( ( array ) $terms as $term )
clean_category_cache ( $term );
2007-09-11 19:33:35 +00:00
// Set all parents to 0 (root-level) if their parent was the converted tag
$wpdb -> query ( " UPDATE $wpdb->term_taxonomy SET parent = 0 WHERE parent = ' { $category -> term_id } ' AND taxonomy = 'category' " );
}
2007-04-10 16:57:21 +00:00
// Clean the cache
2007-05-26 18:54:16 +00:00
clean_category_cache ( $category -> term_id );
2007-06-14 02:25:30 +00:00
2007-04-07 04:58:28 +00:00
_e ( 'Converted successfully.' );
}
2007-06-14 02:25:30 +00:00
2007-04-07 04:58:28 +00:00
print '</li>' ;
}
2007-06-14 02:25:30 +00:00
2007-04-07 04:58:28 +00:00
print '</ul>' ;
}
2007-06-14 02:25:30 +00:00
2007-04-07 04:58:28 +00:00
function init () {
2007-06-14 02:25:30 +00:00
2007-10-11 17:50:56 +00:00
$step = ( isset ( $_GET [ 'step' ])) ? ( int ) $_GET [ 'step' ] : 1 ;
2007-06-14 02:25:30 +00:00
2007-04-07 04:58:28 +00:00
$this -> header ();
2007-06-14 02:25:30 +00:00
2007-04-09 16:27:22 +00:00
if ( ! current_user_can ( 'manage_categories' )) {
2007-04-07 15:43:20 +00:00
print '<div class="narrow">' ;
2007-04-07 15:52:53 +00:00
print '<p>' . __ ( 'Cheatin’ uh?' ) . '</p>' ;
2007-04-07 15:43:20 +00:00
print '</div>' ;
} else {
2007-08-25 17:07:10 +00:00
if ( $step > 1 )
check_admin_referer ( 'import-cat2tag' );
2007-04-07 15:43:20 +00:00
switch ( $step ) {
case 1 :
$this -> welcome ();
2007-04-07 04:58:28 +00:00
break ;
2007-06-14 02:25:30 +00:00
2007-04-07 15:43:20 +00:00
case 2 :
$this -> convert_them ();
2007-04-07 04:58:28 +00:00
break ;
2007-04-07 15:43:20 +00:00
}
2007-04-07 04:58:28 +00:00
}
2007-06-14 02:25:30 +00:00
2007-04-07 04:58:28 +00:00
$this -> footer ();
}
2007-06-14 02:25:30 +00:00
2007-04-07 19:04:57 +00:00
function WP_Categories_to_Tags () {
// Do nothing.
}
2007-04-07 04:58:28 +00:00
}
2007-04-07 19:04:57 +00:00
$wp_cat2tag_importer = new WP_Categories_to_Tags ();
2007-04-07 04:58:28 +00:00
register_importer ( 'wp-cat2tag' , __ ( 'Categories to Tags Converter' ), __ ( 'Convert existing categories to tags, selectively.' ), array ( & $wp_cat2tag_importer , 'init' ));
2007-04-12 05:59:59 +00:00
?>