var $author_ids = array ();
var $tags = array ();
var $categories = array ();
+ var $terms = array ();
var $j = -1;
var $fetch_attachments = false;
$this->tags[] = $tag[1];
continue;
}
+ if ( false !== strpos($importline, '<wp:term>') ) {
+ preg_match('|<wp:term>(.*?)</wp:term>|is', $importline, $term);
+ $this->terms[] = $term[1];
+ continue;
+ }
if ( false !== strpos($importline, '<item>') ) {
$this->post = '';
$doing_entry = true;
function wp_authors_form() {
?>
-<?php screen_icon(); ?>
<h2><?php _e('Assign Authors'); ?></h2>
<p><?php _e('To make it easier for you to edit and save the imported posts and drafts, you may want to change the name of the author of the posts. For example, you may want to import all the entries as <code>admin</code>s entries.'); ?></p>
<?php
$authors = $this->get_wp_authors();
echo '<form action="?import=wordpress&step=2&id=' . $this->id . '" method="post">';
wp_nonce_field('import-wordpress');
- echo '<ol id="authors">';
+?>
+<ol id="authors">
+<?php
$j = -1;
foreach ($authors as $author) {
++ $j;
if ( $this->allow_fetch_attachments() ) {
?>
</ol>
-<?php screen_icon(); ?>
<h2><?php _e('Import Attachments'); ?></h2>
<p>
<input type="checkbox" value="1" name="attachments" id="import-attachments" />
$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' );
echo '<h3>'.sprintf(__('All done.').' <a href="%s">'.__('Have fun!').'</a>', get_option('home')).'</h3>';
}
+ function _normalize_tag( $matches ) {
+ return '<' . strtolower( $matches[1] );
+ }
+
function process_post($post) {
global $wpdb;
$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('<br>', '<br />', $post_excerpt);
$post_excerpt = str_replace('<hr>', '<hr />', $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('<br>', '<br />', $post_content);
$post_content = str_replace('<hr>', '<hr />', $post_content);
else {
printf(__('Importing post <em>%s</em>...'), 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 ) )
preg_match_all('|<wp:comment>(.*?)</wp:comment>|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);
}
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;
}
$this->get_entries();
$this->process_categories();
$this->process_tags();
+ $this->process_terms();
$result = $this->process_posts();
wp_suspend_cache_invalidation(false);
$this->backfill_parents();