X-Git-Url: https://scripts.mit.edu/gitweb/autoinstalls/wordpress.git/blobdiff_plain/d3b1ea255664edd2deef17f900a655613d20820d..9cd344f9b14dd8e0743c1417fdb379b1431c3988:/wp-admin/import/wordpress.php diff --git a/wp-admin/import/wordpress.php b/wp-admin/import/wordpress.php index 99903487..83c90acf 100644 --- a/wp-admin/import/wordpress.php +++ b/wp-admin/import/wordpress.php @@ -27,6 +27,7 @@ class WP_Import { var $author_ids = array (); var $tags = array (); var $categories = array (); + var $terms = array (); var $j = -1; var $fetch_attachments = false; @@ -122,6 +123,11 @@ class WP_Import { $this->tags[] = $tag[1]; continue; } + if ( false !== strpos($importline, '') ) { + preg_match('|(.*?)|is', $importline, $term); + $this->terms[] = $term[1]; + continue; + } if ( false !== strpos($importline, '') ) { $this->post = ''; $doing_entry = true; @@ -198,7 +204,6 @@ class WP_Import { function wp_authors_form() { ?> -

admins entries.'); ?>

get_wp_authors(); echo '
'; wp_nonce_field('import-wordpress'); - echo '
    '; +?> +
      +allow_fetch_attachments() ) { ?>
    -

    @@ -337,6 +343,43 @@ class WP_Import { $tag_ID = wp_insert_term($tag_name, 'post_tag', $tagarr); } } + + function process_terms() { + global $wpdb, $wp_taxonomies; + + $custom_taxonomies = $wp_taxonomies; + // get rid of the standard taxonomies + unset( $custom_taxonomies['category'] ); + unset( $custom_taxonomies['post_tag'] ); + unset( $custom_taxonomies['link_category'] ); + + $custom_taxonomies = array_keys( $custom_taxonomies ); + $current_terms = (array) get_terms( $custom_taxonomies, 'get=all' ); + $taxonomies = array(); + foreach ( $current_terms as $term ) { + if ( isset( $_terms[$term->taxonomy] ) ) { + $taxonomies[$term->taxonomy] = array_merge( $taxonomies[$term->taxonomy], array($term->name) ); + } else { + $taxonomies[$term->taxonomy] = array($term->name); + } + } + + while ( $c = array_shift($this->terms) ) { + $term_name = trim($this->get_tag( $c, 'wp:term_name' )); + $term_taxonomy = trim($this->get_tag( $c, 'wp:term_taxonomy' )); + + // If the term exists in the taxonomy we leave it alone + if ( isset($taxonomies[$term_taxonomy] ) && in_array( $term_name, $taxonomies[$term_taxonomy] ) ) + continue; + + $slug = $this->get_tag( $c, 'wp:term_slug' ); + $description = $this->get_tag( $c, 'wp:term_description' ); + + $termarr = compact('slug', 'description'); + + $term_ID = wp_insert_term($term_name, $this->get_tag( $c, 'wp:term_taxonomy' ), $termarr); + } + } function process_author($post) { $author = $this->get_tag( $post, 'dc:creator' ); @@ -357,6 +400,10 @@ class WP_Import { echo '

    '.sprintf(__('All done.').' '.__('Have fun!').'', get_option('home')).'

    '; } + function _normalize_tag( $matches ) { + return '<' . strtolower( $matches[1] ); + } + function process_post($post) { global $wpdb; @@ -378,16 +425,17 @@ class WP_Import { $menu_order = $this->get_tag( $post, 'wp:menu_order' ); $post_type = $this->get_tag( $post, 'wp:post_type' ); $post_password = $this->get_tag( $post, 'wp:post_password' ); + $is_sticky = $this->get_tag( $post, 'wp:is_sticky' ); $guid = $this->get_tag( $post, 'guid' ); $post_author = $this->get_tag( $post, 'dc:creator' ); $post_excerpt = $this->get_tag( $post, 'excerpt:encoded' ); - $post_excerpt = preg_replace_callback('|<(/?[A-Z]+)|', create_function('$match', 'return "<" . strtolower($match[1]);'), $post_excerpt); + $post_excerpt = preg_replace_callback('|<(/?[A-Z]+)|', array( &$this, '_normalize_tag' ), $post_excerpt); $post_excerpt = str_replace('
    ', '
    ', $post_excerpt); $post_excerpt = str_replace('
    ', '
    ', $post_excerpt); $post_content = $this->get_tag( $post, 'content:encoded' ); - $post_content = preg_replace_callback('|<(/?[A-Z]+)|', create_function('$match', 'return "<" . strtolower($match[1]);'), $post_content); + $post_content = preg_replace_callback('|<(/?[A-Z]+)|', array( &$this, '_normalize_tag' ), $post_content); $post_content = str_replace('
    ', '
    ', $post_content); $post_content = str_replace('
    ', '
    ', $post_content); @@ -448,6 +496,9 @@ class WP_Import { else { printf(__('Importing post %s...'), stripslashes($post_title)); $comment_post_ID = $post_id = wp_insert_post($postdata); + if ( $post_id && $is_sticky == 1 ) + stick_post( $post_id ); + } if ( is_wp_error( $post_id ) ) @@ -508,25 +559,35 @@ class WP_Import { preg_match_all('|(.*?)|is', $post, $comments); $comments = $comments[1]; $num_comments = 0; - if ( $comments) { foreach ($comments as $comment) { - $comment_author = $this->get_tag( $comment, 'wp:comment_author'); - $comment_author_email = $this->get_tag( $comment, 'wp:comment_author_email'); - $comment_author_IP = $this->get_tag( $comment, 'wp:comment_author_IP'); - $comment_author_url = $this->get_tag( $comment, 'wp:comment_author_url'); - $comment_date = $this->get_tag( $comment, 'wp:comment_date'); - $comment_date_gmt = $this->get_tag( $comment, 'wp:comment_date_gmt'); - $comment_content = $this->get_tag( $comment, 'wp:comment_content'); - $comment_approved = $this->get_tag( $comment, 'wp:comment_approved'); - $comment_type = $this->get_tag( $comment, 'wp:comment_type'); - $comment_parent = $this->get_tag( $comment, 'wp:comment_parent'); - - // if this is a new post we can skip the comment_exists() check - if ( !$post_exists || !comment_exists($comment_author, $comment_date) ) { - $commentdata = compact('comment_post_ID', 'comment_author', 'comment_author_url', 'comment_author_email', 'comment_author_IP', 'comment_date', 'comment_date_gmt', 'comment_content', 'comment_approved', 'comment_type', 'comment_parent'); - wp_insert_comment($commentdata); - $num_comments++; + $inserted_comments = array(); + if ( $comments) { + foreach ($comments as $comment) { + $comment_id = $this->get_tag( $comment, 'wp:comment_id'); + $newcomments[$comment_id]['comment_post_ID'] = $comment_post_ID; + $newcomments[$comment_id]['comment_author'] = $this->get_tag( $comment, 'wp:comment_author'); + $newcomments[$comment_id]['comment_author_email'] = $this->get_tag( $comment, 'wp:comment_author_email'); + $newcomments[$comment_id]['comment_author_IP'] = $this->get_tag( $comment, 'wp:comment_author_IP'); + $newcomments[$comment_id]['comment_author_url'] = $this->get_tag( $comment, 'wp:comment_author_url'); + $newcomments[$comment_id]['comment_date'] = $this->get_tag( $comment, 'wp:comment_date'); + $newcomments[$comment_id]['comment_date_gmt'] = $this->get_tag( $comment, 'wp:comment_date_gmt'); + $newcomments[$comment_id]['comment_content'] = $this->get_tag( $comment, 'wp:comment_content'); + $newcomments[$comment_id]['comment_approved'] = $this->get_tag( $comment, 'wp:comment_approved'); + $newcomments[$comment_id]['comment_type'] = $this->get_tag( $comment, 'wp:comment_type'); + $newcomments[$comment_id]['comment_parent'] = $this->get_tag( $comment, 'wp:comment_parent'); } - } } + // Sort by comment ID, to make sure comment parents exist (if there at all) + ksort($newcomments); + foreach ($newcomments as $key => $comment) { + // if this is a new post we can skip the comment_exists() check + if ( !$post_exists || !comment_exists($comment['comment_author'], $comment['comment_date']) ) { + if (isset($inserted_comments[$comment['comment_parent']])) + $comment['comment_parent'] = $inserted_comments[$comment['comment_parent']]; + $comment = wp_filter_comment($comment); + $inserted_comments[$key] = wp_insert_comment($comment); + $num_comments++; + } + } + } if ( $num_comments ) printf(' '._n('(%s comment)', '(%s comments)', $num_comments), $num_comments); @@ -684,8 +745,8 @@ class WP_Import { } function is_valid_meta_key($key) { - // skip _wp_attached_file metadata since we'll regenerate it from scratch - if ( $key == '_wp_attached_file' ) + // skip attachment metadata since we'll regenerate it from scratch + if ( $key == '_wp_attached_file' || $key == '_wp_attachment_metadata' ) return false; return $key; } @@ -740,6 +801,7 @@ class WP_Import { $this->get_entries(); $this->process_categories(); $this->process_tags(); + $this->process_terms(); $result = $this->process_posts(); wp_suspend_cache_invalidation(false); $this->backfill_parents();